【问题标题】:Nested Variables in Unity InspectorUnity Inspector 中的嵌套变量
【发布时间】:2022-10-18 15:27:38
【问题描述】:

我想知道是否有人知道如何使用脚本在统一检查器中创建嵌套变量,有点像这样:

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    这样做确实需要了解UnityEditor 并且不仅(正如您所说的......嵌套变量)可以在检查器中为您提供许多其他控制选项。为此,我创建了一个名为MenuManager 的示例代码。如您所见,这段代码:

    public class MenuManager : MonoBehaviour
    {
        public bool variable1;
    
        public float nestedVariable;
        
        //...
    }
    

    Unity 本身不为此类请求提供任何属性,例如 [Range][Header],为此您需要为该类定义一个 CustomEditor 但在此之前,您需要创建一个类似于将名称为Editor 的照片放入Assets 文件夹中。然后创建另一个名为MenuEditor 的脚本(例如这里..)并将其放在编辑器文件夹中。

    现在打开MenuEditor 代码。从 Editor 类继承它。 Editor 类是编辑检查器等的基类。它将为您提供许多覆盖方法,可以访问统一编辑器中的功能。并确保它有两个属性Custom Editor 以及CanEditMultipleObjects

    [CustomEditor(typeof(MenuManager))]
    [CanEditMultipleObjects]
    public class MenuEditor : Editor
    {
        //..
    }
    

    此代码使您可以访问MenuManager 脚本。根据下面的代码,我将一个嵌套变量编码到第一个变量中。

    [CustomEditor(typeof(MenuManager))]
    [CanEditMultipleObjects]
    public class MenuEditor : Editor 
    {
        public override void OnInspectorGUI()
        {
            var myMenu = target as MenuManager; // target is script reference that we want to manipulate it
    
            myMenu.variable1 = EditorGUILayout.Toggle("Variable 1", myMenu.variable1); // show first variable on inspector
    
            GUI.enabled = myMenu.variable1; // access to second variable depend of first
    
            myMenu.nestedVariable =EditorGUILayout.Toggle("Nested Variable", myMenu.nestedVariable);
            
            GUI.enabled = true;
        }
    }
    

    完成工作后,您只能通过将第一个设置为 true 来访问嵌套变量。

    请记住,完成此操作后,您可以在 MenuEditor 类中访问许多其他功能,但如果您觉得这很困难,我建议您使用Odin Inspecter。我希望你已经得到你的答案。如果您需要更多信息,请在答案下发表评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多