Unity 2D平台游戏实现角色双向不同动画切换的最简方法
实现方案
核心思路
不需要修改你已有的基础动画播放逻辑,仅新增1个朝向控制参数关联两套动画的切换即可,整体改动量极小。
操作步骤
- 提前准备好两套完整的角色动画资源:朝右动作组(对应你说的动画1)、朝左动作组(对应你说的动画2),两套动画的状态参数保持和你现有逻辑一致(比如
MoveSpeed、IsGrounded等参数无需修改) - 打开角色的Animator窗口,新增一个布尔类型参数
FacingRight - 给所有同类型的左右朝向动画加互相过渡的规则:
- 朝右状态转朝左状态的触发条件设为
FacingRight == false - 朝左状态转朝右状态的触发条件设为
FacingRight == true - 关闭过渡规则的
Has Exit Time、Fixed Duration选项,过渡时长设为0避免切换卡顿
- 朝右状态转朝左状态的触发条件设为
- 给角色挂载的动画控制脚本中补充输入判断逻辑,示例代码如下:
using UnityEngine; public class PlayerAnimationController : MonoBehaviour { private Animator playerAnim; void Awake() { playerAnim = GetComponent<Animator>(); } void Update() { // 获取水平输入值,适配Unity默认的左右方向键、A/D键输入 float horizontalInput = Input.GetAxis("Horizontal"); if (horizontalInput > 0.01f) { playerAnim.SetBool("FacingRight", true); } else if (horizontalInput < -0.01f) { playerAnim.SetBool("FacingRight", false); } // 此处保留你原有控制动画的其他逻辑即可 } }
更简化的替代方案
如果你左右朝向的动画是分开做的两个独立Animator Controller,连状态机过渡都不需要配置,直接按输入切换Controller即可:
- 给脚本新增两个public的
RuntimeAnimatorController字段,分别赋值朝右、朝左的动画控制器文件 - 输入判断时直接修改Animator的
runtimeAnimatorController属性值即可
注意事项
- 输入判断加0.01的阈值是为了过滤输入轴的死区波动,避免误触发朝向切换
- 如果你使用Unity新Input System,仅需要把
Input.GetAxis("Horizontal")替换为新输入系统的水平输入取值逻辑即可,其他逻辑完全通用
内容的提问来源于stack exchange,提问作者koren zissu
相关产品推荐
相关产品推荐

