1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using UnityEngine;
- using UnityEditor;
-
- namespace MLAgents
- {
- /// <summary>
- /// CustomEditor for the Heuristic Brain class. Defines the default Inspector view for a
- /// HeuristicBrain.
- /// Shows the BrainParameters of the Brain and expose a tool to deep copy BrainParameters
- /// between brains. Provides a drag box for a Decision Monoscript that will be used by
- /// the Heuristic Brain.
- /// </summary>
- [CustomEditor(typeof(HeuristicBrain))]
- public class HeuristicBrainEditor : BrainEditor
- {
- public override void OnInspectorGUI()
- {
- EditorGUILayout.LabelField("Heuristic Brain", EditorStyles.boldLabel);
- var brain = (HeuristicBrain) target;
- base.OnInspectorGUI();
-
- // Expose the Heuristic Brain's Monoscript for decision in a drag and drop box.
- brain.decisionScript = EditorGUILayout.ObjectField(
- "Decision Script", brain.decisionScript, typeof(MonoScript), true) as MonoScript;
-
- CheckIsDecision(brain);
- // Draw an error box if the Decision is not set.
- if (brain.decisionScript == null)
- {
- EditorGUILayout.HelpBox("You need to add a 'Decision' component to this Object",
- MessageType.Error);
- }
- }
-
- /// <summary>
- /// Ensures tht the Monoscript for the decision of the HeuristicBrain is either null or
- /// an implementation of Decision. If the Monoscript is not an implementation of
- /// Decision, it will be set to null.
- /// </summary>
- /// <param name="brain">The HeuristicBrain with the decision script attached</param>
- private static void CheckIsDecision(HeuristicBrain brain)
- {
- if (brain.decisionScript != null)
- {
- var decisionInstance = (CreateInstance(brain.decisionScript.name) as Decision);
- if (decisionInstance == null)
- {
- Debug.LogError(
- "Instance of " + brain.decisionScript.name + " couldn't be created. " +
- "The the script class needs to derive from Decision.");
- brain.decisionScript = null;
- }
- }
- }
- }
- }
|