当我统一使用GridLayoutGroup时,在检查器中看不到private / public字段

时间:2019-05-19 04:39:23

标签: c# unity3d unity3d-editor

当我使用GridLayoutGroup时,在检查器中看不到

私有/公共字段

这是示例

enter image description here

这就是我定义变量的方式:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine.UI; 
using UnityEngine; 
using UnityEditor; 

public class Myscript : GridLayoutGroup 
{ 
    [SerializeField] private bool ishhh; 
}

1 个答案:

答案 0 :(得分:1)

大多数Unity内置组件都有一个[CustomEditor]覆盖默认的Inspector。

具体来说,GridLayoutGroup有一个名为GridLayoutGroupEditor的自定义检查器,它将覆盖从GridLayoutGroup派生的任何类的检查器。

→您必须继承它才能为从GridLayoutGroup派生的类创建自定义编辑器。

为了使其他字段可见,您可以执行类似

的操作
using UnityEditor;

...

[CustomEditor(typeof(Myscript))]
public class MyScriptEditor : GridLayoutGroupEditor
{
    private SerializedProperty ishhh;

    // Called when the Inspector is loaded
    // Usually when the according GameObject gets selected in the hierarchy
    private void OnEnable ()
    {
        // "Link" the SerializedProperty to a real serialized field
        // (public fields are serialized automatically)
        ishhh = serializedObject.FindProperty("ishhh");
    }

    // Kind of the Inspector's Update method
    public override void OnInpectorGUI ()
    {
        // Draw the default inspector
        // base.OnInspectorGUI();

        // Fetch current values into the serialized properties
        serializedObject.Update();

        // Automatically uses the correct field drawer according to the property type
        EditorGUILayout.PropertyField(ishhh);

        // Write back changed values to the real component
        serializedObject.ApplyModifiedProperties();
    }
}

重要提示::将此脚本放置在名为Editor的文件夹中,以便在构建中将其删除,以避免与UnityEditor名称空间有关的内部错误。

或者(因为我可以看到示例代码中已经有一个using UnityEditor),可以将其保留在同一脚本中,但是随后您必须手动使用#if Pre-Processors才能剥离所有代码-blocks / -line off使用UnityEditor名称空间中的内容,例如

#if UNITY_EDITOR

    using UnityEditor;

#endif

...

#if UNITY_EDITOR

    // any code using UnityEditor

#endif

否则,由于UnityEditor仅存在于Unity Editor本身,并且已完全剥离用于构建,因此您将无法构建应用。


注意:在智能手机上键入内容,因此没有保修,但我希望这个主意会清楚