您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
56 行
2.3 KiB
56 行
2.3 KiB
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 script class needs to derive from Decision.");
|
|
brain.decisionScript = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|