Files
aibis-dream/Assets/Scripts/FrameAnimation/Timeline/Editor/FrameAnimationTimelineClipEditor.cs
T

52 lines
1.6 KiB
C#

using UnityEditor.Timeline;
using UnityEngine.Timeline;
namespace AibisDream.FrameAnimation.Timeline.Editor
{
[CustomTimelineEditor(typeof(FrameAnimationTimelineClip))]
internal sealed class FrameAnimationTimelineClipEditor : ClipEditor
{
public override void OnCreate(TimelineClip clip, TrackAsset track, TimelineClip clonedFrom)
{
base.OnCreate(clip, track, clonedFrom);
SynchronizeSource(clip);
}
public override void OnClipChanged(TimelineClip clip)
{
base.OnClipChanged(clip);
SynchronizeSource(clip);
}
public override ClipDrawOptions GetClipOptions(TimelineClip clip)
{
var options = base.GetClipOptions(clip);
if (clip?.asset is not FrameAnimationTimelineClip asset)
{
return options;
}
if (asset.FrameClip == null)
{
options.errorText = "未指定 FrameClip";
}
return options;
}
private static void SynchronizeSource(TimelineClip clip)
{
if (clip?.asset is not FrameAnimationTimelineClip asset ||
!asset.TrySynchronizeSourceDuration(out var duration))
{
return;
}
clip.duration = duration;
clip.displayName = asset.FrameClip != null &&
!string.IsNullOrEmpty(asset.FrameClip.DisplayName)
? asset.FrameClip.DisplayName
: "Frame Animation Clip";
}
}
}