66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using JetBrains.Annotations;
 | |
| using UnityEngine;
 | |
| using UnityEngine.Playables;
 | |
| using UnityEngine.Timeline;
 | |
| 
 | |
| namespace UnityEditor.Timeline
 | |
| {
 | |
|     [CustomTimelineEditor(typeof(AnimationPlayableAsset)), UsedImplicitly]
 | |
|     class AnimationPlayableAssetEditor : ClipEditor
 | |
|     {
 | |
|         public static readonly string k_NoClipAssignedError = L10n.Tr("No animation clip assigned");
 | |
|         public static readonly string k_LegacyClipError = L10n.Tr("Legacy animation clips are not supported");
 | |
|         static readonly string k_MotionCurveError = L10n.Tr("You are using motion curves without applyRootMotion enabled on the Animator. The root transform will not be animated");
 | |
|         static readonly string k_RootCurveError = L10n.Tr("You are using root curves without applyRootMotion enabled on the Animator. The root transform will not be animated");
 | |
| 
 | |
|         /// <inheritdoc/>
 | |
|         public override ClipDrawOptions GetClipOptions(TimelineClip clip)
 | |
|         {
 | |
|             var clipOptions = base.GetClipOptions(clip);
 | |
|             var asset = clip.asset as AnimationPlayableAsset;
 | |
| 
 | |
|             if (asset != null)
 | |
|                 clipOptions.errorText = GetErrorText(asset, clip.GetParentTrack() as AnimationTrack, clipOptions.errorText);
 | |
| 
 | |
|             if (clip.recordable)
 | |
|                 clipOptions.highlightColor = DirectorStyles.Instance.customSkin.colorAnimationRecorded;
 | |
| 
 | |
|             return clipOptions;
 | |
|         }
 | |
| 
 | |
|         /// <inheritdoc />
 | |
|         public override void OnCreate(TimelineClip clip, TrackAsset track, TimelineClip clonedFrom)
 | |
|         {
 | |
|             var asset = clip.asset as AnimationPlayableAsset;
 | |
|             if (asset != null && asset.clip != null && asset.clip.legacy)
 | |
|             {
 | |
|                 asset.clip = null;
 | |
|                 Debug.LogError("Legacy Animation Clips are not supported");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         string GetErrorText(AnimationPlayableAsset animationAsset, AnimationTrack track, string defaultError)
 | |
|         {
 | |
|             if (animationAsset.clip == null)
 | |
|                 return k_NoClipAssignedError;
 | |
|             if (animationAsset.clip.legacy)
 | |
|                 return k_LegacyClipError;
 | |
|             if (animationAsset.clip.hasMotionCurves || animationAsset.clip.hasRootCurves)
 | |
|             {
 | |
|                 if (track != null && track.trackOffset == TrackOffset.Auto)
 | |
|                 {
 | |
|                     var animator = track.GetBinding(TimelineEditor.inspectedDirector);
 | |
|                     if (animator != null && !animator.applyRootMotion && !animationAsset.clip.hasGenericRootTransform)
 | |
|                     {
 | |
|                         if (animationAsset.clip.hasMotionCurves)
 | |
|                             return k_MotionCurveError;
 | |
|                         return k_RootCurveError;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return defaultError;
 | |
|         }
 | |
|     }
 | |
| }
 |