Unity3D - 自定义检查器中的自定义数组

时间:2015-10-13 23:50:03

标签: c# unity3d

我正在尝试在Custom Inspector中自定义Array对象,如下图所示。

enter image description here

我无法找到如何做到这一点。 :-(
你能告诉我怎么做吗?任何链接或答案都会非常有用。

以下代码是我到目前为止所做的工作。

myClass.cs

using UnityEngine;
using System.Collections;

public class myClass : MonoBehaviour {

    public string[] myArray = new string[0];

    void Update () {
        // do something
    }
}

myClassEditor.cs

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor(typeof(myClass))]
[CanEditMultipleObjects]
public class myClassEditor : Editor {

    SerializedObject serializedObj;
    myClass myClassScript;
    SerializedProperty myArray;

    void OnEnable() {
        serializedObj = new SerializedObject (target);
        myClassScript = (myClass)target;
        myArray = serializedObject.FindProperty ("myArray");
    }

    public override void OnInspectorGUI() {
        serializedObj.Update ();
        EditorGUILayout.HelpBox ("Default Inspector", MessageType.None);
        DrawDefaultInspector();
        EditorGUILayout.HelpBox ("Custom Inspector", MessageType.None);
        EditorGUILayout.PropertyField(myArray, new GUIContent("My Custom         Array"), true);
        serializedObj.ApplyModifiedProperties ();
    }
}

1 个答案:

答案 0 :(得分:1)

如果您只想更改字体,可以查看将GUI.Skin设置为自定义GUISkin

如果您确实想要更改文本,那么它将更加复杂。您必须循环遍历数组的所有值,并为每个值手动添加标签和值字段,以便您拥有完全控制权。这意味着您必须编写自己的控件来管理数组,例如添加或删除条目。您还必须管理序列化数据,因为属性域会为您处理大量数据。您还需要查看SetDirty,以便编辑知道何时更改了某些内容并需要保存。

第二个选项非常复杂,但它可以让您精确控制它的外观。您甚至可以添加箭头按钮之类的东西来在数组中上下移动数组元素。