允许类通过将 AnimationClip 的 Playable 节点提供给 Animation 窗口 PlayableGraph 来修改其在 Animation 窗口中的采样方式。该类还必须继承自 MonoBehaviour。
using UnityEngine; using UnityEngine.Animations; using UnityEngine.Playables;
[RequireComponent(typeof(Animator))] public class ExampleScript : MonoBehaviour, IAnimationWindowPreview { public Vector3 offset = Vector3.zero;
private AnimationScriptPlayable m_Playable; private AnimationJob m_Job; private Vector3 m_CurrentOffset;
struct AnimationJob : IAnimationJob { public TransformStreamHandle transform; public Vector3 offset;
public void ProcessRootMotion(AnimationStream stream) { Vector3 position = transform.GetLocalPosition(stream); position += offset;
transform.SetLocalPosition(stream, position); }
public void ProcessAnimation(AnimationStream stream) { } }
public void StartPreview() { m_CurrentOffset = offset; }
public void StopPreview() { }
public void UpdatePreviewGraph(PlayableGraph graph) { if (m_CurrentOffset != offset) { m_Job.offset = offset; m_Playable.SetJobData(m_Job);
m_CurrentOffset = offset; } }
public Playable BuildPreviewGraph(PlayableGraph graph, Playable input) { Animator animator = GetComponent<Animator>();
m_Job = new AnimationJob(); m_Job.transform = animator.BindStreamTransform(transform); m_Job.offset = offset;
m_Playable = AnimationScriptPlayable.Create(graph, m_Job, 1);
graph.Connect(input, 0, m_Playable, 0);
return m_Playable; } }
BuildPreviewGraph | 将自定义 Playable 节点附加到 Animation 窗口 PlayableGraph。 |
StartPreview | 在 Animation 窗口开始预览 AnimationClip 时的通知回调。 |
StopPreview | 在 Animation 窗口停止预览 AnimationClip 时的通知回调。 |
UpdatePreviewGraph | 在 Animation 窗口对 AnimationClip 采样之前更新其 PlayableGraph 时的通知回调。 |