unity 通用的控制动画状态机方法代码
时间: 2023-07-24 19:20:07 浏览: 279
以下是一个示例代码,演示如何在 Unity 中实现通用的控制动画状态机:
```csharp
using UnityEngine;
public class CharacterController : MonoBehaviour
{
// 定义状态枚举类型
public enum CharacterState
{
Idle,
Walk,
Run,
Jump,
Attack,
Dead
}
// 定义 Animator 组件
private Animator animator;
// 定义当前状态
private CharacterState currentState;
// Start 方法在脚本被启用时调用
void Start()
{
// 获取 Animator 组件
animator = GetComponent<Animator>();
}
// Update 方法在每一帧都会被调用
void Update()
{
// 根据玩家输入更新状态
UpdateState();
// 根据当前状态更新动画播放
UpdateAnimation();
}
// 更新状态
private void UpdateState()
{
// 根据玩家输入更新状态
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S))
{
currentState = CharacterState.Walk;
}
else if (Input.GetKey(KeyCode.LeftShift))
{
currentState = CharacterState.Run;
}
else if (Input.GetKey(KeyCode.Space))
{
currentState = CharacterState.Jump;
}
else if (Input.GetKey(KeyCode.Mouse0))
{
currentState = CharacterState.Attack;
}
else
{
currentState = CharacterState.Idle;
}
}
// 更新动画播放
private void UpdateAnimation()
{
// 根据当前状态更新动画播放
switch (currentState)
{
case CharacterState.Idle:
animator.SetBool("IsIdle", true);
animator.SetBool("IsWalk", false);
animator.SetBool("IsRun", false);
animator.SetBool("IsJump", false);
animator.SetBool("IsAttack", false);
animator.SetBool("IsDead", false);
break;
case CharacterState.Walk:
animator.SetBool("IsIdle", false);
animator.SetBool("IsWalk", true);
animator.SetBool("IsRun", false);
animator.SetBool("IsJump", false);
animator.SetBool("IsAttack", false);
animator.SetBool("IsDead", false);
break;
case CharacterState.Run:
animator.SetBool("IsIdle", false);
animator.SetBool("IsWalk", false);
animator.SetBool("IsRun", true);
animator.SetBool("IsJump", false);
animator.SetBool("IsAttack", false);
animator.SetBool("IsDead", false);
break;
case CharacterState.Jump:
animator.SetBool("IsIdle", false);
animator.SetBool("IsWalk", false);
animator.SetBool("IsRun", false);
animator.SetBool("IsJump", true);
animator.SetBool("IsAttack", false);
animator.SetBool("IsDead", false);
break;
case CharacterState.Attack:
animator.SetBool("IsIdle", false);
animator.SetBool("IsWalk", false);
animator.SetBool("IsRun", false);
animator.SetBool("IsJump", false);
animator.SetBool("IsAttack", true);
animator.SetBool("IsDead", false);
break;
case CharacterState.Dead:
animator.SetBool("IsIdle", false);
animator.SetBool("IsWalk", false);
animator.SetBool("IsRun", false);
animator.SetBool("IsJump", false);
animator.SetBool("IsAttack", false);
animator.SetBool("IsDead", true);
break;
}
}
}
```
在该示例代码中,我们定义了一个枚举类型 `CharacterState` 来表示角色的状态,然后在 `Update()` 方法中根据玩家输入更新状态,最后在 `UpdateAnimation()` 方法中根据当前状态更新动画播放。在更新动画播放时,我们使用 `animator.SetBool()` 方法来设置相应的参数,从而控制动画的播放。
阅读全文