事情发生的原因是在我的一个项目中,该项目使用了TimeLine作为技能编辑器,并使用PlayableDirector和Animantor以及Animancer进行播放,且由代码重载OnAnimatorMove方法并使用Animancer.Animator.deltaPosition来进行位置信息的更新。
Bug发生的情况是:当我暂停PlayableDirector的播放再恢复时,发现获取的DeltaPosition的值产生了错误,根据官方文档,Animator.deltaPosition是自上一帧进行计算的,也就是说很可能对PlayableDirector的控制无法同时控制Animator,而且无法对Animator直接进行Speed的修改。
尝试分别对三种组件进行修改,依旧无法实现正确获取Animator的值,最后的解决方案是直接修改playableDirector.playableGraph.GetRootPlayable(0).SetSpeed(0)。通过修改TimeLine的Playable播放速度来控制Animator,终于使得deltaPosition值获取正常。
private IEnumerator StopAnim(int time){IsAnim = false;_playableDirector.playableGraph.GetRootPlayable(0).SetSpeed(0);_riginDeltaPosition = _Animancer.Animator.deltaPosition;yield return new WaitForSeconds(Time.fixedDeltaTime * time);_playableDirector.playableGraph.GetRootPlayable(0).SetSpeed(1);IsAnim = true;_stopAnimCoroutine = null;}