CinemachineNewVirtualCameraEditor.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #if CINEMACHINE_EXPERIMENTAL_VCAM
  2. using UnityEngine;
  3. using UnityEditor;
  4. using Cinemachine.Editor;
  5. using Cinemachine.Utility;
  6. namespace Cinemachine
  7. {
  8. [CustomEditor(typeof(CinemachineNewVirtualCamera))]
  9. sealed class CinemachineNewVirtualCameraEditor
  10. : CinemachineVirtualCameraBaseEditor<CinemachineNewVirtualCamera>
  11. {
  12. VcamPipelineStageSubeditorSet mPipelineSet = new VcamPipelineStageSubeditorSet();
  13. protected override void OnEnable()
  14. {
  15. base.OnEnable();
  16. mPipelineSet.CreateSubeditors(this);
  17. }
  18. protected override void OnDisable()
  19. {
  20. mPipelineSet.Shutdown();
  21. base.OnDisable();
  22. }
  23. public override void OnInspectorGUI()
  24. {
  25. // Ordinary properties
  26. BeginInspector();
  27. DrawHeaderInInspector();
  28. DrawPropertyInInspector(FindProperty(x => x.m_Priority));
  29. DrawTargetsInInspector(FindProperty(x => x.m_Follow), FindProperty(x => x.m_LookAt));
  30. DrawRemainingPropertiesInInspector();
  31. // Pipeline Stages
  32. var components = Target.ComponentCache;
  33. for (int i = 0; i < mPipelineSet.m_subeditors.Length; ++i)
  34. {
  35. var ed = mPipelineSet.m_subeditors[i];
  36. if (ed == null)
  37. continue;
  38. if (!ed.HasImplementation)
  39. continue;
  40. ed.OnInspectorGUI(components[i]); // may destroy component
  41. }
  42. // Extensions
  43. DrawExtensionsWidgetInInspector();
  44. }
  45. Vector3 mPreviousPosition; // for position dragging
  46. private void OnSceneGUI()
  47. {
  48. if (!Target.UserIsDragging)
  49. mPreviousPosition = Target.transform.position;
  50. if (Selection.Contains(Target.gameObject) && Tools.current == Tool.Move
  51. && Event.current.type == EventType.MouseDrag)
  52. {
  53. // User might be dragging our position handle
  54. Target.UserIsDragging = true;
  55. Vector3 delta = Target.transform.position - mPreviousPosition;
  56. if (!delta.AlmostZero())
  57. {
  58. mPipelineSet.OnPositionDragged(delta);
  59. mPreviousPosition = Target.transform.position;
  60. }
  61. }
  62. else if (GUIUtility.hotControl == 0 && Target.UserIsDragging)
  63. {
  64. // We're not dragging anything now, but we were
  65. InspectorUtility.RepaintGameView();
  66. Target.UserIsDragging = false;
  67. }
  68. }
  69. }
  70. }
  71. #endif