Animation
Animation View
•通过动画视图可以直接创建和修改动画片段(Animation Clips)。
•显示动画视图:Window—Animation。
创建动画片段
•为物体添加Animation组件。
•在动画视图中创建片段。
录制动画片段
•录制步骤:
- 点击录制按钮,开始录制动画。
- 添加关键帧Add Property,选择组件类型。
- 选择关键帧,调整时间点。
- 在Scene 或Inspector 面板设置属性。
- 点击录制按钮,结束录制动画。
•任何组件以及材质的属性都可进行动画处理,即使是自定 义脚本组件的公共变量。
时间线
Animation 组件属性
•动画Animation:当前动画。
•动画列表Animations:可以从脚本访问的动画列表。
•自动播放Play Automatically:启动游戏时自动播放的动画。
动画片段属性
•包裹模式Wrap Mode:动画结束后的处理方式。
–默认Default,使用动画剪辑中的处理方法;
–播放一次Once,播放到头后停止;
–循环播放Loop,播放到头后再重头播放;
–乒乓播放PingPong,播放到头后再反向播放;
–固定永久Clamp Forever,播放到头后永远播放最后一 帧;
常用API函数
•bool isPlay=animation.isPlaying;
•bool isPlay=animation.IsPlaying(“动画名”);
•animation.Play(“动画名”); //正常播放
•animation.PlayQueued(“动画名”); //在前一个动画播放完成之后直接播放下一个动画
•animation.CrossFade(“动画名”); //在一定时间内淡入名称为name的动画并淡出其他动画
•animation[“动画名”].speed = 5; //speed=-1 时 倒序播放
•animation[“动画名”].wrapMode
= WrapMode.PingPong;
•animation[“动画名”].length;//当前动画总长度
•animation[“动画名”].time; //当前动画播放到第几帧
练习:录制门开关动画
public class AnimationScript : MonoBehaviour
{
public bool doorState=false;
private Animation anim;
public string animName = "AnimationDemo1";//以后万一animation改名了只改这里就行了
private void Start()
{
anim = GetComponent<Animation>();
}
//点击当前物体时执行
private void OnMouseDown()
{
if(doorState)
{
//开门操作0---》1
//关门操作 反着播
if(anim.isPlaying==false)
//从最后开始
anim[animName].time = anim[animName].length;
//倒序播放
anim[animName].speed = -1;
}
else
{
anim[animName].speed = 1;
}
anim.Play();
doorState = !doorState;
}
}
Input类
什么是Input 类
•包装了输入功能的类,可以读取输入管理器中设置的按键, 以及访问移动设备的多点触控或加速感应数据。
•建议在Update中监测用户的输入。
鼠标输入
•当指定的鼠标按钮被按下时返回true
(一直按下一直返回true)
bool result=Input.GetMouseButton(0);
•在用户按下指定鼠标按键的第一帧返回true
(一直按下只在第一帧返回true)
bool result= Input. GetMouseButtonDown(0);
•在用户释放指定鼠标按键的第一帧返回true
bool result= Input. GetMouseButtonUp(0);
•按钮值设定:
0对应左键,1对应右键,2对应中键。
获取键盘输入
•当通过名称指定的按键被用户按住时返回true
bool result=Input.GetKey(KeyCode.A);
•当用户按下指定名称按键时的那一帧返回true
bool result=Input. GetKeyDown(KeyCode.A);
•在用户释放给定名称按键的那一帧返回true
bool result=Input. GetKeyUp(KeyCode.A);
练习
按下B的状态下按W
void Update(){
if (Input.GetKey(KeyCode.B) && Input.GetKey(KeyCodeDown.W))//这样可以只监测1次
Debug.Log("Jump");
}
狙击枪功能实现
通过鼠标右键,实现摄像机镜头缩放
1、如何渐变:放到update()里
2、缩放匀减速渐变:Mathf.Lerp(起点,终点,变换比例)
3、缩放等级变化
//两个等级来回切换(缩放等级不变)
void Update1()
{
if (Input.GetMouseButtonDown(1))
{
isFar = !isFar;
// Far();
}
if (isFar)
{
//拉远 由20--》60
//由快到慢,无限接近终点(不可能等于终点)
cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, 60, 0.1f);
if (Mathf.Abs(cam.fieldOfView - 60) < 0.01)
cam.fieldOfView = 60;
}
else//拉近 由60--》20
{
cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, 20, 0.1f);
if (Mathf.Abs(cam.fieldOfView - 20) < 0.01)
cam.fieldOfView = 20;
}
}
//多等级来回切换(缩放等级随需求变化)
public float[] zoomLevel;//在不确定数组长度的情况下可以不用new,改变时可在面板直接改
public int index=-1;
void Update()
{
if (Input.GetMouseButtonDown(1))
{
//index=index>=zoomLevel.Length-1?0:index;
index = (index + 1) % zoomLevel.Length;
cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, zoomLevel[index], 0.1f);
if (Mathf.Abs(zoomLevel[index] - 60) < 0.01)
zoomLevel[index] = 60;
}
}
InputManager
什么是InputManager?
•即输入管理器Edit—Project Settings—Input
•使用脚本通过虚拟轴名称获取自定义键的输入。
•玩家可以在游戏启动时根据个人喜好对虚拟轴进行修改。
知识点
1、虚拟按钮有多少个可以自己修改
2、1个虚拟按钮可以绑定四个真实按键
参数
•Descriptive Name:
游戏加载界面中,正向按键的详细描述。
•Descriptive Negative Name:
游戏加载界面中,反向按键的详细描述。
•Negative Button:该按钮会给轴发送一个负值。
•Positive Button:该按钮会给轴发送一个正值。
•Alt Negative Button:给轴发送负值的另一个按钮。
•Alt Positive Button:给轴发送正值的另一个按钮。
•Gravity:()输入复位的速度,仅用于类型为键/鼠标的按键。
•*Dead:任何小于该值的输入值(不论正负值)都会被视为0, 用于摇杆。
•Sensitivity:(即,摁下的速度)灵敏度,对于键盘输入,该值越大则响应时间 越快,该值越小则越平滑。对于鼠标输入,设置该值会对鼠 标的实际移动距离按比例缩放。
•Snap:如果启用该设置,当轴收到反向的输入信号时,轴 的数值会立即置为0,否则会缓慢的应用反向信号值。仅用 于键/鼠标输入。
•Invert:启用该参数可以让正向按钮发送负值,反向按钮发送正值。
•Type类型:
–键/鼠标(Key / Mouse) ,
–鼠标移动和滚轮(Mouse Movement),
–摇杆(Joystick Axis) 。
•Axis:设备的输入轴(摇杆,鼠标,手柄等)
•*Joy Num:设置使用哪个摇杆。默认是接收所有摇杆的输入。仅用于输入轴和非按键
常用虚拟摁扭
horizonal 默认右为正
Vertical 默认上为正
Jump 摁下Space为正
MouseX 获取鼠标左右移动的方向、速度 大于往右且速度越大。
Mouse ScrollWhell 获取滑动的鼠标滚轮
API 获取虚拟轴
•boolresult=Input. GetButton(“虚拟轴名”);
•boolresult=Input. GetButtonDown(“虚拟轴名”);
•boolresult=Input. GetButtonUp(“虚拟轴名”);
*//以上三个只能判断:该虚拟摁扭是否被摁下
//下面两个可以判断摁下虚拟按钮的是哪一方向*
•float value=Input.GetAxis(“虚拟轴名”);
//返回-1。。。-0.9XX。。-0.8XXX。。。0.。。0.1XX。。。
•float value=Input.GetAxisRaw(“虚拟轴名”);
//只返回-1、0、1
练习 控制摄像机、游戏对象
•1. 鼠标垂直移动使摄像机上下旋转,
鼠标水平移动使摄像机左右旋转。
•2. 键盘垂直输入使飞机前后移动,
键盘水平输入使飞机左右移动。