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; }
/// <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; }
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; } }
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); } }
void DrawSceneTools() { var transposer = Target; if (transposer == null || !transposer.IsValid) { return; } if (CinemachineSceneToolUtility.IsToolActive(typeof(FollowOffsetTool))) { CinemachineSceneToolHelpers.TransposerFollowOffsetTool(transposer); } }
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)); } }
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); }); }
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 }
protected virtual void OnDisable() { CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool)); }
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 }
void DisplayIfRequired() => style.display = CinemachineSceneToolUtility.IsToolRequired(m_FreelookRigSelectionType) ? DisplayStyle.Flex : DisplayStyle.None;
protected CinemachineEditorToolbarToggle() { CinemachineSceneToolUtility.RegisterToolHandlers(GetType(), isOn => value = isOn, display => style.display = display ? DisplayStyle.Flex : DisplayStyle.None); }
/// <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());