You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
using System.Collections.Generic; |
|
using UnityEngine.Animations; |
|
#if !UNITY_2020_2_OR_NEWER |
|
using UnityEngine.Experimental.Animations; |
|
#endif |
|
|
|
using UnityEngine.Playables; |
|
|
|
namespace UnityEngine.Timeline |
|
{ |
|
class AnimationPreviewUpdateCallback : ITimelineEvaluateCallback |
|
{ |
|
AnimationPlayableOutput m_Output; |
|
PlayableGraph m_Graph; |
|
List<IAnimationWindowPreview> m_PreviewComponents; |
|
|
|
public AnimationPreviewUpdateCallback(AnimationPlayableOutput output) |
|
{ |
|
m_Output = output; |
|
|
|
Playable playable = m_Output.GetSourcePlayable(); |
|
if (playable.IsValid()) |
|
{ |
|
m_Graph = playable.GetGraph(); |
|
} |
|
} |
|
|
|
public void Evaluate() |
|
{ |
|
if (!m_Graph.IsValid()) |
|
return; |
|
|
|
if (m_PreviewComponents == null) |
|
FetchPreviewComponents(); |
|
|
|
foreach (var component in m_PreviewComponents) |
|
{ |
|
if (component != null) |
|
{ |
|
component.UpdatePreviewGraph(m_Graph); |
|
} |
|
} |
|
} |
|
|
|
private void FetchPreviewComponents() |
|
{ |
|
m_PreviewComponents = new List<IAnimationWindowPreview>(); |
|
|
|
var animator = m_Output.GetTarget(); |
|
if (animator == null) |
|
return; |
|
|
|
var gameObject = animator.gameObject; |
|
m_PreviewComponents.AddRange(gameObject.GetComponents<IAnimationWindowPreview>()); |
|
} |
|
} |
|
}
|
|
|