using UnityEngine; using UnityEditor; using System.Collections.Generic; namespace Cinemachine.Editor { [CustomEditor(typeof(CinemachineTransposer))] internal sealed class CinemachineTransposerEditor : BaseEditor { protected override List GetExcludedPropertiesInInspector() { List excluded = base.GetExcludedPropertiesInInspector(); switch (Target.m_BindingMode) { default: case CinemachineTransposer.BindingMode.LockToTarget: break; case CinemachineTransposer.BindingMode.LockToTargetNoRoll: excluded.Add(FieldPath(x => x.m_RollDamping)); break; case CinemachineTransposer.BindingMode.LockToTargetWithWorldUp: excluded.Add(FieldPath(x => x.m_PitchDamping)); excluded.Add(FieldPath(x => x.m_RollDamping)); break; case CinemachineTransposer.BindingMode.LockToTargetOnAssign: case CinemachineTransposer.BindingMode.WorldSpace: excluded.Add(FieldPath(x => x.m_PitchDamping)); excluded.Add(FieldPath(x => x.m_YawDamping)); excluded.Add(FieldPath(x => x.m_RollDamping)); break; case CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp: excluded.Add(FieldPath(x => x.m_XDamping)); excluded.Add(FieldPath(x => x.m_PitchDamping)); excluded.Add(FieldPath(x => x.m_YawDamping)); excluded.Add(FieldPath(x => x.m_RollDamping)); break; } return excluded; } public override void OnInspectorGUI() { BeginInspector(); if (Target.FollowTarget == null) EditorGUILayout.HelpBox( "Transposer requires a Follow Target. Change Body to Do Nothing if you don't want a Follow target.", MessageType.Warning); DrawRemainingPropertiesInInspector(); } [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineTransposer))] static void DrawTransposerGizmos(CinemachineTransposer target, GizmoType selectionType) { if (target.IsValid) { Color originalGizmoColour = Gizmos.color; Gizmos.color = CinemachineCore.Instance.IsLive(target.VirtualCamera) ? CinemachineSettings.CinemachineCoreSettings.ActiveGizmoColour : CinemachineSettings.CinemachineCoreSettings.InactiveGizmoColour; Vector3 up = Vector3.up; CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(target.VirtualCamera); if (brain != null) up = brain.DefaultWorldUp; Vector3 targetPos = target.FollowTarget.position; Vector3 desiredPos = target.GeTargetCameraPosition(up); Gizmos.DrawLine(targetPos, desiredPos); Gizmos.DrawWireSphere(desiredPos, HandleUtility.GetHandleSize(desiredPos) / 20); Gizmos.color = originalGizmoColour; } } } }