更新于 

2D Animation

创建动画

新建Animation和Animator

调出Animation面板(Window/Animation/Animation)

Hierarchy选中添加动画的元素(Player)

点击Animation中Create创建新的动画

创建动画的同时,Animator也创建出来了。

创建帧序列动画

将一组帧序列动画拖入Animation面板即可创建一个新的动画,
调整Samples采样值(每秒钟播放的图片数)

idle
idle

Animator动画控制器

Animator设置
  • Parameter 添加变量
  • Base Layer 编辑状态
  • Setting 迁移设置
  • Condition 迁移条件
脚本中修改Animator的变量

定义animator,定义完后记得在Inspector中赋值

1
public Animator animator; // 动画控制器

修改速度Speed变量的值(SetFloat):

1
2
3
4
5
6
7
horizontalMove = Input.GetAxisRaw("Horizontal“) * moveSpeed;
animator.SetFloat("Speed", Mathf.Abs(horizontalMove))
// 跳跃检测
if (Input.GetButtonDown("Jump")) {
jump = true;
animator.SetBool("IsJumping", true);
}

由于跳跃动画并不是在跳跃期间循环播放,而是在跳跃开始到跳跃结束之间只播放一次,
因此需要将Any Status → player_jump 之间的转化Setting的Can Transition To Self关闭。

我们知道角色何时跳起,如何知道何时落地?
同样的,知道角色何时开始蹲下,如何知道角色何时起来?
CharacterController2D脚本提供两个回调函数:

  • OnLand 跳跃结束回调函数
  • OnCrouch 蹲下结束回调函数

在playerMovement中添加两个函数

1
2
3
4
5
6
7
8
9
// 跳跃结束回调函数
public void OnLanding() {
animator.SetBool("IsJumping", false);
}
// 下蹲检测函数
public void OnCrouching(bool isCrouching)
{
animator.SetBool("IsCrouching", isCrouching);
}

设置这两个函数与CharacterController2D中对应:

注意:OnCrouch函数有一个bool类型参数,代表是否蹲下,因此在关联时,需要选用上面的Dynamic bool