使用属性向自定义编辑器公开私有变量

时间:2017-12-30 05:20:22

标签: c# unity3d unity5

我正在尝试创建自定义编辑器统一脚本。

我需要访问我通过属性公开的私有变量。

但是,使用编辑器脚本无法访问该属性。

我正在尝试访问自定义编辑器中的MyObjects属性。

我的班级

public class MySpecialClass : MonoBehaviour {

    [SerializeField]
    private GameObject[] myObjects;
    public GameObject[] MyObjects {
        get {
            return myObjects;
        }

        set {
            myObjects = value;
        }
    }
}

我的自定义编辑器脚本

using UnityEditor;
[CustomEditor(typeof(MySpecialClass))]
public class MySpecialClassEditor : Editor {

    private bool[] showMyObjectSlots = new bool[MySpecialClass.MyObjects.Length]; 
}

为什么不能在CustomEditor中访问公共财产?

2 个答案:

答案 0 :(得分:2)

您需要一个实例来访问非静态MyObjects属性。可以通过自定义编辑器中的target field找到该实例。字段target的类型为UnityEngine.Object,但它指向MonoBehaviour类型的对象,其类是自定义编辑器(CustomEditor中的参数属性),因此可以铸造它。

答案 1 :(得分:0)

只需将 MySpecialClassEditor 中的行替换为

private bool[] showMyObjectSlots = new bool[(MySpecialClass)target.MyObjects.Length];