You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:33:04