ActivationTrackEditor.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using JetBrains.Annotations;
  2. using UnityEngine;
  3. using UnityEngine.Timeline;
  4. using UnityEngine.Playables;
  5. namespace UnityEditor.Timeline
  6. {
  7. [UsedImplicitly]
  8. [CustomTimelineEditor(typeof(ActivationTrack))]
  9. class ActivationTrackEditor : TrackEditor
  10. {
  11. static readonly string ClipText = LocalizationDatabase.GetLocalizedString("Active");
  12. static readonly string k_ErrorParentString = LocalizationDatabase.GetLocalizedString("The bound GameObject is a parent of the PlayableDirector.");
  13. static readonly string k_ErrorString = LocalizationDatabase.GetLocalizedString("The bound GameObject contains the PlayableDirector.");
  14. public override TrackDrawOptions GetTrackOptions(TrackAsset track, Object binding)
  15. {
  16. var options = base.GetTrackOptions(track, binding);
  17. options.errorText = GetErrorText(track, binding);
  18. return options;
  19. }
  20. string GetErrorText(TrackAsset track, Object binding)
  21. {
  22. var gameObject = binding as GameObject;
  23. var currentDirector = TimelineEditor.inspectedDirector;
  24. if (gameObject != null && currentDirector != null)
  25. {
  26. var director = gameObject.GetComponent<PlayableDirector>();
  27. if (currentDirector == director)
  28. {
  29. return k_ErrorString;
  30. }
  31. if (currentDirector.gameObject.transform.IsChildOf(gameObject.transform))
  32. {
  33. return k_ErrorParentString;
  34. }
  35. }
  36. return base.GetErrorText(track, binding, TrackBindingErrors.PrefabBound);
  37. }
  38. public override void OnCreate(TrackAsset track, TrackAsset copiedFrom)
  39. {
  40. // Add a default clip to the newly created track
  41. if (copiedFrom == null)
  42. {
  43. var clip = track.CreateClip(0);
  44. clip.displayName = ClipText;
  45. clip.duration = System.Math.Max(clip.duration, track.timelineAsset.duration * 0.5f);
  46. }
  47. }
  48. }
  49. }