1 #if CINEMACHINE_PHYSICS
5 using System.Collections.Generic;
7 namespace Cinemachine.Editor
9 [CustomEditor(typeof(CinemachineCollider))]
10 internal sealed class CinemachineColliderEditor : BaseEditor<CinemachineCollider>
12 protected override List<string> GetExcludedPropertiesInInspector()
14 List<string> excluded = base.GetExcludedPropertiesInInspector();
15 if (!Target.m_AvoidObstacles)
17 excluded.Add(FieldPath(x => x.m_DistanceLimit));
18 excluded.Add(FieldPath(x => x.m_CameraRadius));
19 excluded.Add(FieldPath(x => x.m_Strategy));
20 excluded.Add(FieldPath(x => x.m_MaximumEffort));
21 excluded.Add(FieldPath(x => x.m_Damping));
22 excluded.Add(FieldPath(x => x.m_DampingWhenOccluded));
23 excluded.Add(FieldPath(x => x.m_SmoothingTime));
25 else if (Target.m_Strategy == CinemachineCollider.ResolutionStrategy.PullCameraForward)
27 excluded.Add(FieldPath(x => x.m_MaximumEffort));
32 public override void OnInspectorGUI()
36 if (Target.m_AvoidObstacles && !Target.VirtualCamera.State.HasLookAt)
37 EditorGUILayout.HelpBox(
38 "Avoid Obstacles requires a LookAt target.",
41 DrawRemainingPropertiesInInspector();
44 [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineCollider))]
45 private static void DrawColliderGizmos(CinemachineCollider collider, GizmoType type)
47 CinemachineVirtualCameraBase vcam = (collider != null) ? collider.VirtualCamera : null;
48 if (vcam != null && collider.enabled)
50 Color oldColor = Gizmos.color;
51 Vector3 pos = vcam.State.FinalPosition;
52 if (collider.m_AvoidObstacles && vcam.State.HasLookAt)
54 Gizmos.color = CinemachineColliderPrefs.FeelerColor;
55 if (collider.m_CameraRadius > 0)
56 Gizmos.DrawWireSphere(pos, collider.m_CameraRadius);
58 Vector3 forwardFeelerVector = (vcam.State.ReferenceLookAt - pos).normalized;
59 float distance = collider.m_DistanceLimit;
60 Gizmos.DrawLine(pos, pos + forwardFeelerVector * distance);
62 // Show the avoidance path, for debugging
63 List<List<Vector3>> debugPaths = collider.DebugPaths;
64 foreach (var path in debugPaths)
66 Gizmos.color = CinemachineColliderPrefs.FeelerHitColor;
67 Vector3 p0 = vcam.State.ReferenceLookAt;
68 foreach (var p in path)
70 Gizmos.DrawLine(p0, p);
73 Gizmos.DrawLine(p0, pos);
76 Gizmos.color = oldColor;