Experimental: this API is experimental and might be changed or removed in the future.

IAnimationWindowPreview

interface in UnityEngine.Experimental.Animations

切换到手册

描述

允许类通过将 AnimationClipPlayable 节点提供给 Animation 窗口 PlayableGraph 来修改其在 Animation 窗口中的采样方式。该类还必须继承自 MonoBehaviour

using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Experimental.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 时的通知回调。