我想为我的一个班级建立一个自定义检查员......而且......我想我会开始简单......我仍然无法得到它来绘制基本检查员:
我的编辑器脚本是:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(AbilityBluePrint))]
[CanEditMultipleObjects]
public class AbilityBluePrintEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
// Show default inspector property editor
DrawDefaultInspector();
}
}
我要编辑的课程是:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[CreateAssetMenu(fileName = "New Ability BluePrint", menuName = "Ability BluePrint")]
public class AbilityBluePrint : ScriptableObject {
public AbilityName abilityName;
public Characteristic[] characteritics;
public Effect[] effects;
public float coolDown;
public Sprite icon;
public string description;
}
关于如何解决“不支持多对象编辑”消息的任何建议,而不是我漂亮的自定义编辑器?
答案 0 :(得分:0)
如果要使用多个对象版本,则需要使用序列化属性。
[CustomEditor(typeof(AbilityBluePrint))]
[CanEditMultipleObjects]
public class AbilityBluePrintEditor : Editor
{
var AbilityName : SerializedProperty;
function OnEnable ()
{
// Setup the SerializedProperties
AbilityName = serializedObject.FindProperty ("Ability");
}
function OnInspectorGUI()
{
// Update the serializedProperty - always do this in the beginning of OnInspectorGUI.
serializedObject.Update ();
...
答案 1 :(得分:-1)
文档中没有对此进行解释,我认为它非常重要。
除了使用序列化属性的选项之外,如果您不能使用这些属性,如果您有自己的项目,则不使用自动管理的序列化属性,则必须使用“ 目标 >”变量而不是“目标”。
我注意到,如果您选择没有共享脚本的不同类型的对象,那么它不会显示共享属性,因此我们不需要检查目标是否都是同一类型,它总是一个或多个。然后,您可以在一个foreach循环中手动处理每个对象。
这是一个在Editor类中的OnInspectorGUI方法的内容的工作示例,其中带有一个简单的复选框,该复选框可在多个脚本中进行更改。希望对您有所帮助。
var myScript = (UnityTerrainWrapper)target;
var allSelectedScripts = targets;
EditorGUI.BeginChangeCheck();
var value = GUILayout.Toggle(myScript.ShowNativeTerrain, "Draw Unity Terrain");
if (EditorGUI.EndChangeCheck())
{
foreach (var script in allSelectedScripts)
((UnityTerrainWrapper)script).ShowNativeTerrain = value;
SceneView.RepaintAll();
}
DrawDefaultInspector();