OSDN Git Service

Added more assets
[mindgames/Mindgames_main.git] / Mindgames / Library / PackageCache / com.unity.cinemachine@2.3.4 / Editor / Editors / CinemachineColliderEditor.cs
1 #if CINEMACHINE_PHYSICS
2
3 using UnityEngine;
4 using UnityEditor;
5 using System.Collections.Generic;
6
7 namespace Cinemachine.Editor
8 {
9     [CustomEditor(typeof(CinemachineCollider))]
10     internal sealed class CinemachineColliderEditor : BaseEditor<CinemachineCollider>
11     {
12         protected override List<string> GetExcludedPropertiesInInspector()
13         {
14             List<string> excluded = base.GetExcludedPropertiesInInspector();
15             if (!Target.m_AvoidObstacles)
16             {
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));
24             }
25             else if (Target.m_Strategy == CinemachineCollider.ResolutionStrategy.PullCameraForward)
26             {
27                 excluded.Add(FieldPath(x => x.m_MaximumEffort));
28             }
29             return excluded;
30         }
31
32         public override void OnInspectorGUI()
33         {
34             BeginInspector();
35
36             if (Target.m_AvoidObstacles && !Target.VirtualCamera.State.HasLookAt)
37                 EditorGUILayout.HelpBox(
38                     "Avoid Obstacles requires a LookAt target.",
39                     MessageType.Warning);
40
41             DrawRemainingPropertiesInInspector();
42         }
43
44         [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineCollider))]
45         private static void DrawColliderGizmos(CinemachineCollider collider, GizmoType type)
46         {
47             CinemachineVirtualCameraBase vcam = (collider != null) ? collider.VirtualCamera : null;
48             if (vcam != null && collider.enabled)
49             {
50                 Color oldColor = Gizmos.color;
51                 Vector3 pos = vcam.State.FinalPosition;
52                 if (collider.m_AvoidObstacles && vcam.State.HasLookAt)
53                 {
54                     Gizmos.color = CinemachineColliderPrefs.FeelerColor;
55                     if (collider.m_CameraRadius > 0)
56                         Gizmos.DrawWireSphere(pos, collider.m_CameraRadius);
57
58                     Vector3 forwardFeelerVector = (vcam.State.ReferenceLookAt - pos).normalized;
59                     float distance = collider.m_DistanceLimit;
60                     Gizmos.DrawLine(pos, pos + forwardFeelerVector * distance);
61
62                     // Show the avoidance path, for debugging
63                     List<List<Vector3>> debugPaths = collider.DebugPaths;
64                     foreach (var path in debugPaths)
65                     {
66                         Gizmos.color = CinemachineColliderPrefs.FeelerHitColor;
67                         Vector3 p0 = vcam.State.ReferenceLookAt;
68                         foreach (var p in path)
69                         {
70                             Gizmos.DrawLine(p0, p);
71                             p0 = p;
72                         }
73                         Gizmos.DrawLine(p0, pos);
74                     }
75                 }
76                 Gizmos.color = oldColor;
77             }
78         }
79     }
80 }
81 #endif