CinemachineTrackedDollyEditor.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System.Collections.Generic;
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace Cinemachine.Editor
  5. {
  6. [CustomEditor(typeof(CinemachineTrackedDolly))]
  7. [CanEditMultipleObjects]
  8. internal sealed class CinemachineTrackedDollyEditor : BaseEditor<CinemachineTrackedDolly>
  9. {
  10. /// <summary>Get the property names to exclude in the inspector.</summary>
  11. /// <param name="excluded">Add the names to this list</param>
  12. protected override void GetExcludedPropertiesInInspector(List<string> excluded)
  13. {
  14. base.GetExcludedPropertiesInInspector(excluded);
  15. switch (Target.m_CameraUp)
  16. {
  17. default:
  18. break;
  19. case CinemachineTrackedDolly.CameraUpMode.PathNoRoll:
  20. case CinemachineTrackedDolly.CameraUpMode.FollowTargetNoRoll:
  21. excluded.Add(FieldPath(x => x.m_RollDamping));
  22. break;
  23. case CinemachineTrackedDolly.CameraUpMode.Default:
  24. excluded.Add(FieldPath(x => x.m_PitchDamping));
  25. excluded.Add(FieldPath(x => x.m_YawDamping));
  26. excluded.Add(FieldPath(x => x.m_RollDamping));
  27. break;
  28. }
  29. }
  30. public override void OnInspectorGUI()
  31. {
  32. BeginInspector();
  33. bool needWarning = false;
  34. for (int i = 0; !needWarning && i < targets.Length; ++i)
  35. needWarning = (targets[i] as CinemachineTrackedDolly).m_Path == null;
  36. if (needWarning)
  37. EditorGUILayout.HelpBox("A Path is required", MessageType.Warning);
  38. needWarning = false;
  39. for (int i = 0; !needWarning && i < targets.Length; ++i)
  40. needWarning = (targets[i] as CinemachineTrackedDolly).m_AutoDolly.m_Enabled
  41. && (targets[i] as CinemachineTrackedDolly).FollowTarget == null;
  42. if (needWarning)
  43. EditorGUILayout.HelpBox("AutoDolly requires a Follow Target", MessageType.Warning);
  44. DrawRemainingPropertiesInInspector();
  45. }
  46. [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineTrackedDolly))]
  47. private static void DrawTrackeDollyGizmos(CinemachineTrackedDolly target, GizmoType selectionType)
  48. {
  49. if (target.IsValid)
  50. {
  51. CinemachinePathBase path = target.m_Path;
  52. if (path != null)
  53. {
  54. var isActive = CinemachineCore.Instance.IsLive(target.VirtualCamera);
  55. CinemachinePathEditor.DrawPathGizmo(path, path.m_Appearance.pathColor, isActive);
  56. Vector3 pos = path.EvaluatePositionAtUnit(target.m_PathPosition, target.m_PositionUnits);
  57. Color oldColor = Gizmos.color;
  58. Gizmos.color = isActive
  59. ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour
  60. : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour;
  61. Gizmos.DrawLine(pos, target.VirtualCamera.State.RawPosition);
  62. Gizmos.color = oldColor;
  63. }
  64. }
  65. }
  66. }
  67. }