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

Unity 2D 2020技术问题:如何让动画在暂停的Timeline中持续播放?

解决Timeline暂停后说话动画继续循环的方案

方案一:分离动画载体(你的思路完全可行)

  • 把说话动画和基础Idle动画分别挂到两个独立的GameObject上(比如角色_说话动画和角色_Idle),Idle动画的对象作为默认显示的主体,说话动画对象默认隐藏。
  • Timeline里只控制Idle动画的播放/暂停,以及通过Activation轨道控制说话动画对象的显示状态。
  • 暂停Timeline时,直接让说话动画的Animator独立循环:
    1. 给说话动画的GameObject加Animator,设置好循环的说话动画状态。
    2. 修改你的暂停脚本:
    public class PauseTimeline : MonoBehaviour
    {
        private PlayableDirector director;
        public Animator speechAnimator; // 拖拽说话动画的Animator进来
    
        void Start()
        {
            director = GetComponent<PlayableDirector>();
            speechAnimator.enabled = false; // 默认关闭
        }
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                PlayTime();
            }
        }
    
        public void PauseTime()
        {
            director.Pause();
            speechAnimator.enabled = true;
            speechAnimator.SetTrigger("StartSpeech"); // 触发循环动画
        }
    
        public void PlayTime()
        {
            director.Play();
            speechAnimator.enabled = false; // 恢复Timeline控制时关闭独立动画
        }
    }
    

方案二:修改Timeline轨道的时间更新模式

  • 不用拆分对象,直接给说话动画轨道做特殊设置:
    1. 选中Timeline里的说话动画轨道,在Inspector里把Update Mode从Timeline改成Unscaled Time。
    2. 同时把说话动画对应的Animator组件的Update Mode也设为Unscaled Time。
    3. 这样Timeline暂停时,这个轨道的动画会脱离Timeline的时间控制,按照实际时间继续循环播放。
    4. 记得把说话动画在Animator里设置为循环状态,且暂停时该轨道处于播放状态。

方案三:代码强制驱动动画

  • 不想改Timeline的话,也可以在暂停后用代码强行更新说话动画:
    public class PauseTimeline : MonoBehaviour
    {
        private PlayableDirector director;
        public Animator characterAnimator;
        private int speechAnimHash = Animator.StringToHash("SpeechLoop"); // 替换成你的说话动画状态名
    
        void Start()
        {
            director = GetComponent<PlayableDirector>();
        }
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                PlayTime();
            }
            // 暂停期间强制更新说话动画
            if (!director.playableGraph.IsPlaying())
            {
                if (characterAnimator.GetCurrentAnimatorStateInfo(0).shortNameHash != speechAnimHash)
                {
                    characterAnimator.Play(speechAnimHash, 0, 0f);
                }
                characterAnimator.Update(Time.unscaledDeltaTime);
            }
        }
    
        public void PauseTime()
        {
            director.Pause();
        }
    
        public void PlayTime()
        {
            director.Play();
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:45:34