Unity之动画系统的学习(一):场景动画

首先创建一个游戏物体

Unity之动画系统的学习(一):场景动画_第1张图片

打开Animation视图

Window ->Animation -> Animation,打开Animation视图
Unity之动画系统的学习(一):场景动画_第2张图片

为游戏物体创建一个动画片段(Animation Clips)文件(以.anim结尾)

Unity之动画系统的学习(一):场景动画_第3张图片

为命名为Cubeposition的动画片段(Animation Clips)录制动画

通过在Animation视图中点击红色按钮就可以开始Cubeposition的动画片段的录制。可以通过移动playback head(白线)到关键帧,并在Scene视图或其他地方进行相应的操作,这样在此关键帧处的变化将被记录下来。再次点击红色按钮可结束录制。具体如下图所示。

通过Create New Clip可以创建一个新的动画片段。
Unity之动画系统的学习(一):场景动画_第4张图片
下面创建命名为CubeRotation和CubeScale的动画片段,并运行。

Animator Controller

通过上图,我们发现运行后只会播放第一个动画片段。要想其他的动画片段也能够播放,这时就需要Animator Controller进行动画状态的控制了。

如下图所示就是一个Animator Controller,在我们创建动画片段时,Unity会为我们自动创建一个Animator Controller。当然如果没有,我们也可以通过在Project视图下右键 -> Create -> Animator Controller
Unity之动画系统的学习(一):场景动画_第5张图片
Unity之动画系统的学习(一):场景动画_第6张图片

通过Window ->Animation -> Animator打开Animator视图。通过滚轮来控制Base Layer的缩放,按住滚轮或按住 Alt/Option 键拖拽可平移视图。

Unity之动画系统的学习(一):场景动画_第7张图片
Entry:进入状态,相当于入口
橙色:默认状态
Exit:退出状态

动画状态的转换

选中一个状态,右键-> Make Transition,连到你想要转换到的状态。
Unity之动画系统的学习(一):场景动画_第8张图片
同时Animator视图可以以可视化的方式看状态的转换,如下图所示。
Unity之动画系统的学习(一):场景动画_第9张图片

用脚本的方式进行状态转换

在Animator视图中的Parameters可以进行参数的设置,通过不同的参数取值来判断是否进行状态的转换。这些参数分为4个基本类型Float,Int,Bool,Trigger。我们可以在脚本中通过调用Animator类中的方法(SetFloat,SetInt,SetBool,SetTrigger,ResetTrigger)对参数进行赋值。
Unity之动画系统的学习(一):场景动画_第10张图片

设置参数

Unity之动画系统的学习(一):场景动画_第11张图片
当触发后,Trigger 的 true 选项会自动返回到 false。

设定转换条件。

点击状态转换的箭头,设置转换条件。

Unity之动画系统的学习(一):场景动画_第12张图片

创建脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//[RequireComponent(typeof(Animator))] //强制要求当前脚本所在的游戏物体必须有Animator组件,没有会自动进行添加
public class AnimController : MonoBehaviour {

    private Animator anim;
    
    void Start() {
        anim = GetComponent<Animator>();
    }

    
    void Update() {

        if (Input.GetKeyDown(KeyCode.Space)) {
            anim.SetTrigger("RoationToScale");
        }

    }
}

效果:

通过运行发现,旋转到缩放的状态不能即时转换,可以通过取消Has Exit Time勾选允许状态的即时转换
Unity之动画系统的学习(一):场景动画_第13张图片

给动画片段添加Event事件

在某个动画帧添加Event事件,让动画片段执行完,销毁游戏物体。

    public void Disappear() {
        Destroy(gameObject);
    }

参考学习自链接

你可能感兴趣的:(Unity3D,unity,游戏开发,动画系统)