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

Unity中Animator组件干扰角色翻转代码,Transform无法更新

问题分析与解决方案

你遇到的核心问题是Animator组件会覆盖Transform的属性修改——当动画片段包含Scale关键帧,或是开启了Root Motion功能时,代码手动修改localScale的操作会被Animator的帧更新覆盖。

快速排查与解决步骤

1. 检查动画片段的关键帧

打开角色所有用到的动画Clip(比如Idle、Run等),在动画编辑器里查看是否存在对Transform.localScale.x的关键帧设置。如果有,直接删除这些关键帧——动画会持续强制设置Scale值,导致代码修改完全无效。

2. 关闭Animator的「Apply Root Motion」

选中角色的Animator组件,取消勾选Apply Root Motion选项。开启该选项时,Animator会完全接管Transform的位置、旋转、缩放更新,代码的修改会被直接覆盖。

3. 改用Animator参数控制翻转(推荐)

如果需要保留Root Motion功能,可以用Animator的参数和镜像功能实现翻转,避免直接修改Scale:

  • 在Animator Controller中添加一个布尔参数(比如IsFacingRight)
  • 给所有需要翻转的动画状态开启Mirror选项(在状态机的Inspector面板中设置)
  • 修改Flip函数,仅控制参数值让Animator自动处理镜像:
    void Flip()
    {
        facingRight = !facingRight;
        animator.SetBool("IsFacingRight", facingRight);
    }
    

4. 调整代码执行时机

如果以上方法无效,尝试把Flip函数的调用逻辑移到LateUpdate()中执行,确保代码在Animator帧更新之后运行,避免被动画帧覆盖:

void LateUpdate()
{
    // 示例:检测输入触发翻转
    if (Input.GetKeyDown(KeyCode.A))
    {
        Flip();
    }
}

void Flip()
{
    facingRight = !facingRight;
    Vector3 scaler = transform.localScale;
    scaler.x *= -1;
    transform.localScale = scaler;
}

内容的提问来源于stack exchange,提问作者Sharpie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:02:48