Animation

Animation View

•通过动画视图可以直接创建和修改动画片段(Animation Clips)。
•显示动画视图:Window—Animation。

创建动画片段

•为物体添加Animation组件。
•在动画视图中创建片段。
Unity 模型动画默认在最后一帧 unity结束动画_其他

录制动画片段

•录制步骤:

  1. 点击录制按钮,开始录制动画。
  2. 添加关键帧Add Property,选择组件类型。
  3. 选择关键帧,调整时间点。
  4. 在Scene 或Inspector 面板设置属性。
  5. 点击录制按钮,结束录制动画。
    •任何组件以及材质的属性都可进行动画处理,即使是自定 义脚本组件的公共变量。
时间线

Unity 模型动画默认在最后一帧 unity结束动画_其他_02

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个虚拟按钮可以绑定四个真实按键

参数

Unity 模型动画默认在最后一帧 unity结束动画_其他_03

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. 键盘垂直输入使飞机前后移动,
键盘水平输入使飞机左右移动。