Unity编辑gui,基本逻辑

时间:2017-10-29 11:20:45

标签: user-interface unity3d

我已经在Unity中编程超过三年了,我一直都被公共变量填充我的检查器屏幕的问题所困扰。经过几个小时的互联网搜索,我遇到了许多深入的编辑器GUI教程和演示,但他们从未解释过如何做我想做的事情,那就是将我的所有变量组织成列表。

示例:我想创建一个公共bool变量,当在编辑器中启用该变量时,会打开一个程序员/艺术家可以与之交互的新变量列表。可以把它想象成一个父对象,它有一堆只在父对象启用时出现的子对象。

最近,我听说过只有在编辑器启用且游戏没有运行时才运行的功能,这可能就是解决问题的方法。现在我不知道在哪里寻找答案。

1 个答案:

答案 0 :(得分:0)

您所描述的是Unity完全支持的自定义检查器。

这是一个很好的入门指南:Building a Custom Inspector

下面的答案提供了here

[CustomEditor(typeof(YourScript))]
public class YourScriptEditor : Editor
{
 private bool AToggle = false;
 private YourScript _evCtrl = null;
 void OnEnable()
 {
     _evCtrl = (YourScript)target;
 }
 public override void OnInspectorGUI()
 {
     //blablabla
     GUILayout.BeginHorizontal();
     GUILayout.Label("A Features", GUILayout.Width(70));
     AToggle = EditorGUILayout.Toggle(AToggle);
     GUILayout.EndHorizontal();
     if (AToggle)
     {
         GUILayout.Space(5);
         GUILayout.BeginHorizontal();
         GUILayout.Label("This Var", GUILayout.Width(70));
         _evCtrl.ThisVar = EditorGUILayout.TextField(_evCtrl.ThisVar);
         GUILayout.EndHorizontal();
         GUILayout.Space(5);
         GUILayout.BeginHorizontal();
         GUILayout.Label("And This One", GUILayout.Width(70));
         _evCtrl.AndThisOne = EditorGUILayout.TextField(_evCtrl.AndThisOne);
         GUILayout.EndHorizontal();
         GUILayout.Space(5);
         GUILayout.BeginHorizontal();
         GUILayout.Label("And This Can Be Slider", GUILayout.Width(70));
         _evCtrl.AndThisCanBeSlider = EditorGUILayout.Slider(_evCtrl.AndThisCanBeSlider, 0f, 100f);
         GUILayout.EndHorizontal();
     }
     //blablabla
 }
}