| | using UnityEditor; |
| | using Unity.MLAgents.Editor; |
| | using Unity.MLAgents.Extensions.Sensors; |
| |
|
| | namespace Unity.MLAgents.Extensions.Editor |
| | { |
| | [CustomEditor(typeof(RigidBodySensorComponent))] |
| | [CanEditMultipleObjects] |
| | internal class RigidBodySensorComponentEditor : UnityEditor.Editor |
| | { |
| | bool ShowHierarchy = true; |
| |
|
| | public override void OnInspectorGUI() |
| | { |
| | var so = serializedObject; |
| | so.Update(); |
| |
|
| | var rbSensorComp = so.targetObject as RigidBodySensorComponent; |
| | if (rbSensorComp.IsTrivial()) |
| | { |
| | EditorGUILayout.HelpBox( |
| | "The Root Body has no Joints, and the Virtual Root is null or the same as the " + |
| | "Root Body's GameObject. This will not generate any useful observations; they will always " + |
| | "be the identity values. Consider removing this component since it won't help the Agent.", |
| | MessageType.Warning |
| | ); |
| | } |
| |
|
| | bool requireExtractorUpdate; |
| |
|
| | EditorGUI.BeginDisabledGroup(!EditorUtilities.CanUpdateModelProperties()); |
| | { |
| | |
| | |
| | EditorGUI.BeginChangeCheck(); |
| | EditorGUILayout.PropertyField(so.FindProperty("RootBody"), true); |
| | EditorGUILayout.PropertyField(so.FindProperty("VirtualRoot"), true); |
| |
|
| | |
| | requireExtractorUpdate = EditorGUI.EndChangeCheck(); |
| |
|
| | EditorGUILayout.PropertyField(so.FindProperty("Settings"), true); |
| |
|
| | |
| | ShowHierarchy = EditorGUILayout.Foldout(ShowHierarchy, "Hierarchy", true); |
| | if (ShowHierarchy) |
| | { |
| | var treeNodes = rbSensorComp.GetDisplayNodes(); |
| | var originalIndent = EditorGUI.indentLevel; |
| | foreach (var node in treeNodes) |
| | { |
| | var obj = node.NodeObject; |
| | var objContents = EditorGUIUtility.ObjectContent(obj, obj.GetType()); |
| | EditorGUI.indentLevel = originalIndent + node.Depth; |
| | var enabled = EditorGUILayout.Toggle(objContents, node.Enabled); |
| | rbSensorComp.SetPoseEnabled(node.OriginalIndex, enabled); |
| | } |
| |
|
| | EditorGUI.indentLevel = originalIndent; |
| | } |
| |
|
| | EditorGUILayout.PropertyField(so.FindProperty("sensorName"), true); |
| | } |
| | EditorGUI.EndDisabledGroup(); |
| |
|
| | so.ApplyModifiedProperties(); |
| | if (requireExtractorUpdate) |
| | { |
| | rbSensorComp.ResetPoseExtractor(); |
| | } |
| | } |
| | } |
| | } |
| |
|