using UnityEditor; namespace Unity.Cinemachine.Editor { [CustomEditor(typeof(CinemachineHardLookAt))] [CanEditMultipleObjects] class CinemachineHardLookAtEditor : CinemachineComponentBaseEditor { CinemachineHardLookAt Target => target as CinemachineHardLookAt; protected virtual void OnEnable() { CinemachineDebug.OnGUIHandlers -= OnGuiHandler; CinemachineDebug.OnGUIHandlers += OnGuiHandler; if (CinemachineCorePrefs.ShowInGameGuides.Value) InspectorUtility.RepaintGameView(); CinemachineSceneToolUtility.RegisterTool(typeof(TrackedObjectOffsetTool)); } protected virtual void OnDisable() { CinemachineDebug.OnGUIHandlers -= OnGuiHandler; if (CinemachineCorePrefs.ShowInGameGuides.Value) InspectorUtility.RepaintGameView(); CinemachineSceneToolUtility.UnregisterTool(typeof(TrackedObjectOffsetTool)); } protected virtual void OnGuiHandler(CinemachineBrain brain) { // Draw the camera guides if (Target == null || !CinemachineCorePrefs.ShowInGameGuides.Value || !Target.isActiveAndEnabled) return; // Don't draw the guides if rendering to texture if (brain == null || brain.OutputCamera == null || (brain.OutputCamera.activeTexture != null && CinemachineBrain.ActiveBrainCount > 1)) return; var vcam = Target.VirtualCamera; if (!brain.IsValidChannel(vcam)) return; bool isLive = targets.Length <= 1 && brain.IsLiveChild(vcam, true); var t = Target.LookAtTarget; if (Target.LookAtTarget != null && isLive) { var point = t.position + t.rotation * Target.LookAtOffset; CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenTargetMarker( point, brain.OutputCamera); } } void OnSceneGUI() { if (Target == null || !Target.IsValid) return; if (CinemachineSceneToolUtility.IsToolActive(typeof(TrackedObjectOffsetTool))) { CinemachineSceneToolHelpers.TrackedObjectOffsetTool( Target.VirtualCamera, new SerializedObject(Target).FindProperty(() => Target.LookAtOffset), CinemachineCore.Stage.Aim); } } } }