void DrawSceneTools()
        {
            var vcam = Target;

            if (vcam == null || !vcam.IsValid || vcam.m_ExcludedPropertiesInInspector.Contains("m_Lens"))
            {
                return;
            }

            var originalColor = Handles.color;

            Handles.color = Handles.preselectionColor;
            if (CinemachineSceneToolUtility.IsToolActive(typeof(FoVTool)))
            {
                CinemachineSceneToolHelpers.FovToolHandle(vcam,
                                                          new SerializedObject(vcam).FindProperty(() => vcam.m_Lens),
                                                          vcam.m_Lens, IsHorizontalFOVUsed());
            }
            else if (CinemachineSceneToolUtility.IsToolActive(typeof(FarNearClipTool)))
            {
                CinemachineSceneToolHelpers.NearFarClipHandle(vcam,
                                                              new SerializedObject(vcam).FindProperty(() => vcam.m_Lens));
            }
            Handles.color = originalColor;
        }
Пример #2
0
 /// <summary>This is called when the Tool is deselected in the editor.</summary>
 public override void OnWillBeDeactivated()
 {
     base.OnWillBeDeactivated();
     CinemachineSceneToolUtility.SetTool(false, GetType());
     m_State.refreshIcon = true;
     m_State.isSelected  = false;
 }
Пример #3
0
        protected CinemachineExclusiveEditorToolbarToggle()
        {
            var type = GetType();

            this.RegisterValueChangedCallback(
                v => CinemachineSceneToolUtility.SetTool(v.newValue, type));
            CinemachineSceneToolUtility.RegisterExclusiveToolHandlers(type, isOn => value      = isOn,
                                                                      display => style.display = display ? DisplayStyle.Flex : DisplayStyle.None);
        }
        protected virtual void OnDisable()
        {
#if UNITY_2021_2_OR_NEWER
            if (!Target.HideOffsetInInspector)
            {
                CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
            }
#endif
        }
        protected override void OnDisable()
        {
            Undo.undoRedoPerformed -= ResetTargetOnUndo;
            m_PipelineSet.Shutdown();
            base.OnDisable();

#if UNITY_2021_2_OR_NEWER
            CinemachineSceneToolUtility.UnregisterTool(typeof(FoVTool));
            CinemachineSceneToolUtility.UnregisterTool(typeof(FarNearClipTool));
#endif
        }
        void DrawSceneTools()
        {
            var framingTransposer = Target;

            if (framingTransposer == null || !framingTransposer.IsValid)
            {
                return;
            }

            if (CinemachineSceneToolUtility.IsToolActive(typeof(TrackedObjectOffsetTool)))
            {
                CinemachineSceneToolHelpers.TrackedObjectOffsetTool(framingTransposer,
                                                                    new SerializedObject(framingTransposer).FindProperty(() => framingTransposer.m_TrackedObjectOffset));
            }
            else if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
            {
                var originalColor = Handles.color;
                var camPos        = framingTransposer.VcamState.RawPosition;
                var targetForward = framingTransposer.VirtualCamera.State.FinalOrientation * Vector3.forward;
                EditorGUI.BeginChangeCheck();
                Handles.color = CinemachineSceneToolHelpers.HelperLineDefaultColor;
                var cdHandleId        = GUIUtility.GetControlID(FocusType.Passive);
                var newHandlePosition = Handles.Slider(cdHandleId, camPos, targetForward,
                                                       CinemachineSceneToolHelpers.CubeHandleCapSize(camPos), Handles.CubeHandleCap, 0.5f);
                if (EditorGUI.EndChangeCheck())
                {
                    // Modify via SerializedProperty for OnValidate to get called automatically, and scene repainting too
                    var so   = new SerializedObject(framingTransposer);
                    var prop = so.FindProperty(() => framingTransposer.m_CameraDistance);
                    prop.floatValue -= CinemachineSceneToolHelpers.SliderHandleDelta(newHandlePosition, camPos, targetForward);
                    so.ApplyModifiedProperties();
                }

                var cameraDistanceHandleIsDragged       = GUIUtility.hotControl == cdHandleId;
                var cameraDistanceHandleIsUsedOrHovered = cameraDistanceHandleIsDragged ||
                                                          HandleUtility.nearestControl == cdHandleId;
                if (cameraDistanceHandleIsUsedOrHovered)
                {
                    CinemachineSceneToolHelpers.DrawLabel(camPos,
                                                          "Camera Distance (" + framingTransposer.m_CameraDistance.ToString("F1") + ")");
                }

                Handles.color = cameraDistanceHandleIsUsedOrHovered ?
                                Handles.selectedColor : CinemachineSceneToolHelpers.HelperLineDefaultColor;
                Handles.DrawLine(camPos,
                                 framingTransposer.FollowTarget.position + framingTransposer.m_TrackedObjectOffset);

                CinemachineSceneToolHelpers.SoloOnDrag(cameraDistanceHandleIsDragged, framingTransposer.VirtualCamera,
                                                       cdHandleId);

                Handles.color = originalColor;
            }
        }
Пример #7
0
        protected virtual void OnDisable()
        {
            m_GameViewEventCatcher.OnDisable();
            CinemachineDebug.OnGUIHandlers -= OnGUI;
            if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
            {
                InspectorUtility.RepaintGameView();
            }

#if UNITY_2021_2_OR_NEWER
            CinemachineSceneToolUtility.UnregisterTool(typeof(TrackedObjectOffsetTool));
#endif
        }
        protected virtual void OnEnable()
        {
            for (int i = 0; i < targets.Length; ++i)
            {
                (targets[i] as CinemachineOrbitalTransposer).UpdateInputAxisProvider();
            }

#if UNITY_2021_2_OR_NEWER
            if (!Target.HideOffsetInInspector)
            {
                CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool));
            }
#endif
        }
        void DrawSceneTools()
        {
            var orbitalTransposer = Target;

            if (orbitalTransposer == null || !orbitalTransposer.IsValid || orbitalTransposer.HideOffsetInInspector)
            {
                return;
            }

            if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
            {
                CinemachineSceneToolHelpers.TransposerFollowOffsetTool(orbitalTransposer);
            }
        }
Пример #10
0
        void DrawSceneTools()
        {
            var transposer = Target;

            if (transposer == null || !transposer.IsValid)
            {
                return;
            }

            if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
            {
                CinemachineSceneToolHelpers.TransposerFollowOffsetTool(transposer);
            }
        }
Пример #11
0
        void DrawSceneTools()
        {
            var composer = Target;

            if (composer == null || !composer.IsValid)
            {
                return;
            }

            if (CinemachineSceneToolUtility.IsToolActive(typeof(TrackedObjectOffsetTool)))
            {
                CinemachineSceneToolHelpers.TrackedObjectOffsetTool(composer,
                                                                    new SerializedObject(composer).FindProperty(() => composer.m_TrackedObjectOffset));
            }
        }
Пример #12
0
 public CinemachineToolbarOverlay()
     : base(
         FreelookRigSelection.id,
         FoVTool.id,
         FarNearClipTool.id,
         FollowOffsetTool.id,
         TrackedObjectOffsetTool.id
         )
 {
     CinemachineSceneToolUtility.RegisterToolbarIsDisplayedHandler(() => displayed);
     CinemachineSceneToolUtility.RegisterToolbarDisplayHandler(v =>
     {
         if (displayed == v)
         {
             return(false);
         }
         displayed = v;
         return(true);
     });
 }
Пример #13
0
        protected virtual void OnEnable()
        {
            m_ScreenGuideEditor = new CinemachineScreenComposerGuides();
            m_ScreenGuideEditor.GetHardGuide = () => { return(Target.HardGuideRect); };
            m_ScreenGuideEditor.GetSoftGuide = () => { return(Target.SoftGuideRect); };
            m_ScreenGuideEditor.SetHardGuide = (Rect r) => { Target.HardGuideRect = r; };
            m_ScreenGuideEditor.SetSoftGuide = (Rect r) => { Target.SoftGuideRect = r; };
            m_ScreenGuideEditor.Target       = () => { return(serializedObject); };

            m_GameViewEventCatcher = new GameViewEventCatcher();
            m_GameViewEventCatcher.OnEnable();

            CinemachineDebug.OnGUIHandlers -= OnGUI;
            CinemachineDebug.OnGUIHandlers += OnGUI;
            if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
            {
                InspectorUtility.RepaintGameView();
            }

#if UNITY_2021_2_OR_NEWER
            CinemachineSceneToolUtility.RegisterTool(typeof(TrackedObjectOffsetTool));
#endif
        }
Пример #14
0
 protected virtual void OnDisable()
 {
     CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool));
 }
Пример #15
0
        void DrawSceneTools()
        {
            var thirdPerson = Target;

            if (thirdPerson == null || !thirdPerson.IsValid)
            {
                return;
            }

            if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool)))
            {
                var originalColor = Handles.color;

                thirdPerson.GetRigPositions(out var followTargetPosition, out var shoulderPosition,
                                            out var armPosition);
                var followTargetRotation = thirdPerson.FollowTargetRotation;
                var targetForward        = followTargetRotation * Vector3.forward;
                var heading = Cinemachine3rdPersonFollow.GetHeading(
                    followTargetRotation, thirdPerson.VirtualCamera.State.ReferenceUp);

                EditorGUI.BeginChangeCheck();
                // shoulder handle
#if UNITY_2022_2_OR_NEWER
                var sHandleIds          = Handles.PositionHandleIds.@default;
                var newShoulderPosition = Handles.PositionHandle(sHandleIds, shoulderPosition, heading);
                var sHandleMinId        = sHandleIds.x - 1;
                var sHandleMaxId        = sHandleIds.xyz + 1;
#else
                var sHandleMinId        = GUIUtility.GetControlID(FocusType.Passive);
                var newShoulderPosition = Handles.PositionHandle(shoulderPosition, heading);
                var sHandleMaxId        = GUIUtility.GetControlID(FocusType.Passive);
#endif

                Handles.color = Handles.preselectionColor;
                // arm handle
                var followUp       = followTargetRotation * Vector3.up;
                var aHandleId      = GUIUtility.GetControlID(FocusType.Passive);
                var newArmPosition = Handles.Slider(aHandleId, armPosition, followUp,
                                                    CinemachineSceneToolHelpers.CubeHandleCapSize(armPosition), Handles.CubeHandleCap, 0.5f);

                // cam distance handle
                var camDistance = thirdPerson.CameraDistance;
                var camPos      = armPosition - targetForward * camDistance;
                var cdHandleId  = GUIUtility.GetControlID(FocusType.Passive);
                var newCamPos   = Handles.Slider(cdHandleId, camPos, targetForward,
                                                 CinemachineSceneToolHelpers.CubeHandleCapSize(camPos), Handles.CubeHandleCap, 0.5f);
                if (EditorGUI.EndChangeCheck())
                {
                    // Modify via SerializedProperty for OnValidate to get called automatically, and scene repainting too
                    var so = new SerializedObject(thirdPerson);

                    var shoulderOffset = so.FindProperty(() => thirdPerson.ShoulderOffset);
                    shoulderOffset.vector3Value +=
                        CinemachineSceneToolHelpers.PositionHandleDelta(heading, newShoulderPosition, shoulderPosition);
                    var verticalArmLength = so.FindProperty(() => thirdPerson.VerticalArmLength);
                    verticalArmLength.floatValue +=
                        CinemachineSceneToolHelpers.SliderHandleDelta(newArmPosition, armPosition, followUp);
                    var cameraDistance = so.FindProperty(() => thirdPerson.CameraDistance);
                    cameraDistance.floatValue -=
                        CinemachineSceneToolHelpers.SliderHandleDelta(newCamPos, camPos, targetForward);

                    so.ApplyModifiedProperties();
                }

                var isDragged = IsHandleDragged(sHandleMinId, sHandleMaxId, shoulderPosition, "Shoulder Offset "
                                                + thirdPerson.ShoulderOffset.ToString("F1"), followTargetPosition, shoulderPosition);
                isDragged |= IsHandleDragged(aHandleId, aHandleId, armPosition, "Vertical Arm Length ("
                                             + thirdPerson.VerticalArmLength.ToString("F1") + ")", shoulderPosition, armPosition);
                isDragged |= IsHandleDragged(cdHandleId, cdHandleId, camPos, "Camera Distance ("
                                             + camDistance.ToString("F1") + ")", armPosition, camPos);

                CinemachineSceneToolHelpers.SoloOnDrag(isDragged, thirdPerson.VirtualCamera, sHandleMaxId);

                Handles.color = originalColor;
            }
        protected override void OnEnable()
        {
            base.OnEnable();
            Undo.undoRedoPerformed += ResetTargetOnUndo;
            m_PipelineSet.Initialize(
                // GetComponent
                (stage, result) =>
            {
                int numNullComponents = 0;
                foreach (var obj in targets)
                {
                    var vcam = obj as CinemachineVirtualCamera;
                    if (vcam != null)
                    {
                        var c = vcam.GetCinemachineComponent(stage);
                        if (c != null)
                        {
                            result.Add(c);
                        }
                        else
                        {
                            ++numNullComponents;
                        }
                    }
                }
                return(numNullComponents);
            },
                // SetComponent
                (stage, type) =>
            {
                Undo.SetCurrentGroupName("Cinemachine pipeline change");
                foreach (var obj in targets)
                {
                    var vcam        = obj as CinemachineVirtualCamera;
                    Transform owner = vcam == null ? null : vcam.GetComponentOwner();
                    if (owner == null)
                    {
                        continue;     // maybe it's a prefab
                    }
                    var c = vcam.GetCinemachineComponent(stage);
                    if (c != null && c.GetType() == type)
                    {
                        continue;
                    }
                    if (c != null)
                    {
                        Undo.DestroyObjectImmediate(c);
                        vcam.InvalidateComponentPipeline();
                    }
                    if (type != null)
                    {
                        Undo.AddComponent(owner.gameObject, type);
                        vcam.InvalidateComponentPipeline();
                    }
                }
            });

            // We only look at the first target here, on purpose
            if (Target != null && Target.m_LockStageInInspector != null)
            {
                foreach (var s in Target.m_LockStageInInspector)
                {
                    m_PipelineSet.SetStageIsLocked(s);
                }
            }

#if UNITY_2021_2_OR_NEWER
            CinemachineSceneToolUtility.RegisterTool(typeof(FoVTool));
            CinemachineSceneToolUtility.RegisterTool(typeof(FarNearClipTool));
#endif
        }
Пример #17
0
 void DisplayIfRequired() => style.display =
     CinemachineSceneToolUtility.IsToolRequired(m_FreelookRigSelectionType)
         ? DisplayStyle.Flex : DisplayStyle.None;
Пример #18
0
 protected CinemachineEditorToolbarToggle()
 {
     CinemachineSceneToolUtility.RegisterToolHandlers(GetType(), isOn => value = isOn,
                                                      display => style.display = display ? DisplayStyle.Flex : DisplayStyle.None);
 }
Пример #19
0
 /// <summary>This checks whether this tool should be displayed or not.</summary>
 /// <returns>True, when this tool is to be drawn. False, otherwise.</returns>
 public override bool IsAvailable() => CinemachineSceneToolUtility.IsToolRequired(GetType());