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.
73 lines
2.5 KiB
73 lines
2.5 KiB
using System.Linq; |
|
using UnityEngine; |
|
using UnityEngine.Timeline; |
|
|
|
namespace UnityEditor.Timeline |
|
{ |
|
static class AnimationOffsetMenu |
|
{ |
|
public static string MatchFieldsPrefix = L10n.Tr("Match Offsets Fields/"); |
|
|
|
static bool EnforcePreviewMode() |
|
{ |
|
TimelineEditor.state.previewMode = true; // try and set the preview mode |
|
if (!TimelineEditor.state.previewMode) |
|
{ |
|
Debug.LogError("Match clips cannot be completed because preview mode cannot be enabed"); |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
internal static void MatchClipsToPrevious(TimelineClip[] clips) |
|
{ |
|
if (!EnforcePreviewMode()) |
|
return; |
|
|
|
clips = clips.OrderBy(x => x.start).ToArray(); |
|
foreach (var clip in clips) |
|
{ |
|
var sceneObject = TimelineUtility.GetSceneGameObject(TimelineEditor.inspectedDirector, clip.GetParentTrack()); |
|
if (sceneObject != null) |
|
{ |
|
TimelineAnimationUtilities.MatchPrevious(clip, sceneObject.transform, TimelineEditor.inspectedDirector); |
|
} |
|
} |
|
|
|
InspectorWindow.RepaintAllInspectors(); |
|
TimelineEditor.Refresh(RefreshReason.ContentsModified); |
|
} |
|
|
|
internal static void MatchClipsToNext(TimelineClip[] clips) |
|
{ |
|
if (!EnforcePreviewMode()) |
|
return; |
|
|
|
clips = clips.OrderByDescending(x => x.start).ToArray(); |
|
foreach (var clip in clips) |
|
{ |
|
var sceneObject = TimelineUtility.GetSceneGameObject(TimelineEditor.inspectedDirector, clip.GetParentTrack()); |
|
if (sceneObject != null) |
|
{ |
|
TimelineAnimationUtilities.MatchNext(clip, sceneObject.transform, TimelineEditor.inspectedDirector); |
|
} |
|
} |
|
|
|
InspectorWindow.RepaintAllInspectors(); |
|
TimelineEditor.Refresh(RefreshReason.ContentsModified); |
|
} |
|
|
|
public static void ResetClipOffsets(TimelineClip[] clips) |
|
{ |
|
foreach (var clip in clips) |
|
{ |
|
var asset = clip.asset as AnimationPlayableAsset; |
|
if (asset != null) |
|
asset.ResetOffsets(); |
|
} |
|
|
|
InspectorWindow.RepaintAllInspectors(); |
|
TimelineEditor.Refresh(RefreshReason.ContentsModified); |
|
} |
|
} |
|
}
|
|
|