我正在度假时创建一个有趣的体素游戏,我遇到了Custom Inspector和Editors,以便在创建新的体素时使我的生活更轻松。
问题是:一个简单的体素具有由6个面组成的网格,每个面对应一个方向,例如,北面是索引0的面,上表面是索引4的面,依此类推上。但是,如果我离开检查器以按原样显示数组,则不能保证每个面都将放置在正确的索引上。
我的想法是创建自定义检查器并使它重组数组,编辑器的脚本将包含一个新的数组“ faces”(请参见下面的代码),该数组接收一个face和一个direction,并在检查员,使其成为可能。当前代码是:
using System;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(VoxelMesh))]
public class VoxelMeshEditor: Editor {
public enum DirectionEnum {
North,
East,
South,
West,
Up,
Down,
Other,
Special,
All
}
[Serializable]
public struct DirectionalFace {
public DirectionEnum direction;
public Face face;
}
[SerializeField] private DirectionalFace[] faces;
private SerializedObject soEditor;
private SerializedProperty spFaces;
private void OnEnable() {
soEditor = new SerializedObject(this);
spFaces = soEditor.FindProperty("faces");
}
public override void OnInspectorGUI() {
base.OnInspectorGUI();
if (EditorGUILayout.PropertyField(spFaces, true)) {
soEditor.ApplyModifiedProperties();
}
}
}
结果是:
它创建了一个不可更改的数组,我无法对其进行编辑。我如何使其可编辑?
谢谢。
答案 0 :(得分:0)
尝试将DirectionalFace []面孔变量从私有更改为公开。