unity游戏动画控制(状态机)
在游戏开发中,动画是不可或缺的元素。本文将分享一些关于Unity游戏动画控制(状态机)的经验。
1. 创建Animator Controller并绑定
首先,我们需要创建一个Animator Controller(动画控制器)。在Unity中,为模型添加一个Animator组件,然后将创建好的Animator Controller绑定到该组件的Controller选项栏中。
双击打开新建的Animator Controller,会看到相应的界面。
2. 设置动画状态
在Animator Controller界面中,单击右键创建一个空的状态。接着,将所需展示的动画拖到这个新建的状态上。如果需要多个状态,就重复此操作,拖入相应数量的动画。
以一个动画人物的动作为例,从站立到杀死敌人,所需的动画流程为:站立 -> 跑动 -> 攻击 -> 站立,这形成了一个循环。当然,有些动画也可以逆向播放,例如跑动后站住不动,即跑动 -> 站立。
在初始状态上,单击右键并选择“Make Transition”,会出现一条线,将其连接到下一个状态。这样就完成了状态之间的过渡设置,具体状态在Animator Controller中的表现如下图所示(此处应插入对应的图片)。
3. 认识状态机
注意Animator Controller左下角的区域(标记为③),这里就是我们今天的主角——状态机。点击状态机中的“+”号,可根据需求选择控制动画播放的数据类型。
点击状态与状态之间的连线,会出现一个界面。注意界面中用红线圈起来的地方,这是决定如何控制动画的关键区域。这里我们选择使用布尔类型来控制动画,意味着可以在代码中通过设置该布尔值为true或false,来决定动画是否播放。
除了布尔类型,其他数据类型可根据具体需求进行选择和使用。例如,要实现一个三连击的动画,可以使用float类型的数据,通过数值来判断两个招式之间的间隔时间是否满足连招效果。
4. 代码实现
以下是一个简单的代码示例,展示了如何在Unity中使用状态机控制动画:
/**
By_Robin
*/
using UnityEngine;
using System.Collections;
public class animatorController : MonoBehaviour {
private Animator player;
// Use this for initialization
void Start () {
player = GameObject.Find("Player").GetComponent<Animator>();
// 初始状态,不播放移动的动画
player.SetBool("move", false);
}
// Update is called once per frame
void Update () {
// 如果按下“W”键,执行前进的动画
if (Input.GetKey(KeyCode.W)) {
// 动画的布尔值为true,执行动画
player.SetBool("move", true);
}
}
}
在上述代码中,首先在Start方法中获取Player对象的Animator组件,并将“move”动画的布尔值初始化为false,表示初始状态不播放移动动画。在Update方法中,检测是否按下“W”键,如果按下,则将“move”动画的布尔值设置为true,从而触发移动动画的播放。
通过以上步骤,我们可以在Unity中使用状态机来控制游戏动画的播放,实现更加丰富和流畅的游戏体验。