Unity-自定义检查器不可编辑数组

时间:2018-12-22 22:13:49

标签: c# unity3d

我正在度假时创建一个有趣的体素游戏,我遇到了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();
    }
  }
}

结果是:

enter image description here

它创建了一个不可更改的数组,我无法对其进行编辑。我如何使其可编辑?

谢谢。

1 个答案:

答案 0 :(得分:0)

尝试将DirectionalFace []面孔变量从私有更改为公开。