| | using UnityEngine; |
| | using UnityEditor; |
| | using Unity.MLAgents.Sensors; |
| |
|
| | namespace Unity.MLAgents.Editor |
| | { |
| | internal class RayPerceptionSensorComponentBaseEditor : UnityEditor.Editor |
| | { |
| | bool m_RequireSensorUpdate; |
| |
|
| | protected void OnRayPerceptionInspectorGUI(bool is3d) |
| | { |
| | #if !MLA_UNITY_PHYSICS_MODULE |
| | if (is3d) |
| | { |
| | EditorGUILayout.HelpBox("The Physics Module is not currently present. " + |
| | "Please add it to your project in order to use the Ray Perception APIs in the " + |
| | $"{nameof(RayPerceptionSensorComponent3D)}", MessageType.Warning); |
| | } |
| | #endif |
| | #if !MLA_UNITY_PHYSICS2D_MODULE |
| | if (!is3d) |
| | { |
| | EditorGUILayout.HelpBox("The Physics2D Module is not currently present. " + |
| | "Please add it to your project in order to use the Ray Perception APIs in the " + |
| | $"{nameof(RayPerceptionSensorComponent3D)}", MessageType.Warning); |
| | } |
| | #endif |
| | var so = serializedObject; |
| | so.Update(); |
| |
|
| | |
| | EditorGUI.BeginChangeCheck(); |
| | EditorGUI.indentLevel++; |
| |
|
| | |
| | |
| | |
| | EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); |
| | { |
| | EditorGUILayout.PropertyField(so.FindProperty("m_SensorName"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("m_DetectableTags"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("m_RaysPerDirection"), true); |
| | } |
| | EditorGUI.EndDisabledGroup(); |
| |
|
| | EditorGUILayout.PropertyField(so.FindProperty("m_MaxRayDegrees"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("m_SphereCastRadius"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("m_RayLength"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("m_RayLayerMask"), true); |
| |
|
| | |
| | |
| | EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); |
| | { |
| | EditorGUILayout.PropertyField(so.FindProperty("m_ObservationStacks"), new GUIContent("Stacked Raycasts"), true); |
| | } |
| | EditorGUI.EndDisabledGroup(); |
| |
|
| | if (is3d) |
| | { |
| | EditorGUILayout.PropertyField(so.FindProperty("m_StartVerticalOffset"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("m_EndVerticalOffset"), true); |
| | } |
| |
|
| | EditorGUILayout.PropertyField(so.FindProperty("m_AlternatingRayOrder"), true); |
| | if (is3d) |
| | { |
| | EditorGUILayout.PropertyField(so.FindProperty("m_UseBatchedRaycasts"), true); |
| | } |
| |
|
| | EditorGUILayout.PropertyField(so.FindProperty("rayHitColor"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("rayMissColor"), true); |
| |
|
| | EditorGUI.indentLevel--; |
| | if (EditorGUI.EndChangeCheck()) |
| | { |
| | m_RequireSensorUpdate = true; |
| | } |
| |
|
| | so.ApplyModifiedProperties(); |
| | UpdateSensorIfDirty(); |
| | } |
| |
|
| | void UpdateSensorIfDirty() |
| | { |
| | if (m_RequireSensorUpdate) |
| | { |
| | var sensorComponent = serializedObject.targetObject as RayPerceptionSensorComponentBase; |
| | sensorComponent?.UpdateSensor(); |
| | m_RequireSensorUpdate = false; |
| | } |
| | } |
| | } |
| |
|
| | [CustomEditor(typeof(RayPerceptionSensorComponent2D), editorForChildClasses: true)] |
| | [CanEditMultipleObjects] |
| | internal class RayPerceptionSensorComponent2DEditor : RayPerceptionSensorComponentBaseEditor |
| | { |
| | public override void OnInspectorGUI() |
| | { |
| | OnRayPerceptionInspectorGUI(false); |
| | } |
| | } |
| |
|
| | [CustomEditor(typeof(RayPerceptionSensorComponent3D), editorForChildClasses: true)] |
| | [CanEditMultipleObjects] |
| | internal class RayPerceptionSensorComponent3DEditor : RayPerceptionSensorComponentBaseEditor |
| | { |
| | public override void OnInspectorGUI() |
| | { |
| | OnRayPerceptionInspectorGUI(true); |
| | } |
| | } |
| | } |
| |
|