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

Unity中Timeline动画播放时如何保持Player Controls生效?

解决Unity Timeline动画播放时玩家控件失效的问题

核心原因

Timeline动画默认会在Update阶段修改Transform属性,且优先级高于普通脚本的Update逻辑,导致脚本对玩家位置的修改被动画帧覆盖,只有动画结束后脚本才能生效。

解决方案

1. 关闭动画片段的Write Defaults

  • 双击Timeline中的目标动画片段,进入动画编辑器
  • 在Inspector面板找到Write Defaults选项,设置为Off
  • 此设置会让动画仅修改关键帧定义的属性,不会覆盖脚本对其他属性(比如X轴位置)的修改

2. 调整脚本执行顺序

  • 打开Edit > Project Settings > Script Execution Order
  • 将PlayerControls脚本的执行顺序数值设为大于Animator的数值(数值越大,执行时机越晚)
  • 确保脚本对位置的修改在动画更新之后执行,覆盖动画的结果

3. 使用LateUpdate替代Update

修改脚本,将位置逻辑移到LateUpdate中,确保在所有动画更新完成后再处理玩家输入:

using UnityEngine;

public class PlayerControls : MonoBehaviour
{
    [SerializeField] float controlSpeed = 10f;

    void LateUpdate()
    {
        float xThrow = Input.GetAxis("Horizontal");
        float xOffset = xThrow * Time.deltaTime * controlSpeed;
        float newXPos = transform.localPosition.x + xOffset;
        transform.localPosition = new Vector3(newXPos, transform.localPosition.y, transform.localPosition.z);
    }
}

4. 采用Additive动画混合模式(适用于Animator轨道)

如果Timeline使用的是Animator轨道而非直接Transform轨道:

  • 在Animator Controller中新建动画层,设置Blend Mode为Additive
  • 将Timeline动画分配到该层,动画位移会与脚本控制的位移叠加,而非覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:23