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"; } } }