AnimationPlayableAssetEditor.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using JetBrains.Annotations;
  2. using UnityEngine;
  3. using UnityEngine.Playables;
  4. using UnityEngine.Timeline;
  5. namespace UnityEditor.Timeline
  6. {
  7. [CustomTimelineEditor(typeof(AnimationPlayableAsset)), UsedImplicitly]
  8. class AnimationPlayableAssetEditor : ClipEditor
  9. {
  10. public static readonly string k_NoClipAssignedError = LocalizationDatabase.GetLocalizedString("No animation clip assigned");
  11. public static readonly string k_LegacyClipError = LocalizationDatabase.GetLocalizedString("Legacy animation clips are not supported");
  12. static readonly string k_MotionCurveError = LocalizationDatabase.GetLocalizedString("You are using motion curves without applyRootMotion enabled on the Animator. The root transform will not be animated");
  13. static readonly string k_RootCurveError = LocalizationDatabase.GetLocalizedString("You are using root curves without applyRootMotion enabled on the Animator. The root transform will not be animated");
  14. /// <inheritdoc/>
  15. public override ClipDrawOptions GetClipOptions(TimelineClip clip)
  16. {
  17. var clipOptions = base.GetClipOptions(clip);
  18. var asset = clip.asset as AnimationPlayableAsset;
  19. if (asset != null)
  20. clipOptions.errorText = GetErrorText(asset, clip.parentTrack as AnimationTrack, clipOptions.errorText);
  21. if (clip.recordable)
  22. clipOptions.highlightColor = DirectorStyles.Instance.customSkin.colorAnimationRecorded;
  23. return clipOptions;
  24. }
  25. /// <inheritdoc />
  26. public override void OnCreate(TimelineClip clip, TrackAsset track, TimelineClip clonedFrom)
  27. {
  28. var asset = clip.asset as AnimationPlayableAsset;
  29. if (asset != null && asset.clip != null && asset.clip.legacy)
  30. {
  31. asset.clip = null;
  32. Debug.LogError("Legacy Animation Clips are not supported");
  33. }
  34. }
  35. string GetErrorText(AnimationPlayableAsset animationAsset, AnimationTrack track, string defaultError)
  36. {
  37. if (animationAsset.clip == null)
  38. return k_NoClipAssignedError;
  39. if (animationAsset.clip.legacy)
  40. return k_LegacyClipError;
  41. if (animationAsset.clip.hasMotionCurves || animationAsset.clip.hasRootCurves)
  42. {
  43. if (track != null && track.trackOffset == TrackOffset.Auto)
  44. {
  45. var animator = track.GetBinding(TimelineEditor.inspectedDirector);
  46. if (animator != null && !animator.applyRootMotion && !animationAsset.clip.hasGenericRootTransform)
  47. {
  48. if (animationAsset.clip.hasMotionCurves)
  49. return k_MotionCurveError;
  50. return k_RootCurveError;
  51. }
  52. }
  53. }
  54. return defaultError;
  55. }
  56. }
  57. }