【发布时间】:2022-10-18 15:27:38
【问题描述】:
我想知道是否有人知道如何使用脚本在统一检查器中创建嵌套变量,有点像这样:
【问题讨论】:
标签: unity3d
我想知道是否有人知道如何使用脚本在统一检查器中创建嵌套变量,有点像这样:
【问题讨论】:
标签: unity3d
这样做确实需要了解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。我希望你已经得到你的答案。如果您需要更多信息,请在答案下发表评论。
【讨论】: