我可以在脚本的组件中制作下拉菜单吗?- Unity3D

tag5nh1u  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(123)

我正在做一个脚本,我想做一个下拉菜单,如果是一个选项,显示一些变量。体型:如果是在"动态"中,则显示要设置的变量数量,但如果是在"运动学"中,则显示要设置的其他变量数量。
有什么办法吗?
我回答任何问题。
我试着在谷歌,Youtube上找到,但我没有找到任何关于它.

bis0qfac

bis0qfac1#

您可以编写自定义检查器或使用枚举

public enum Shape
{
    Circle,
    Square,
    Triangle
}

并将字段添加到MonoBehaviour中

public Shape shape;

会变成那样

艰难而漫长的路

EditorGUILayout.Popup(indexOfTheSelectedOption, stringArrayOfOptions);

这里有一个例子

[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor
{        
    // the index of selected option
    private int index;

    public override void OnInspectorGUI()
    {
        // the index of selected option
        index = EditorGUILayout.Popup(index, new string[] { "Option1", "etc" });
    }
}

您可以找到更多的herehere
编辑:
就像你在评论里问的

[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor
{        
    // the serialized fields of the varibles you wanna change
    SerialiedProperty var1, var2, var3; // ...etc.

    // the index of selected option
    private int index;

    private void Awake()
    {
        var1 = serializedObject.FindProperty("var1");
        var2 = serializedObject.FindProperty("var2");
        var3 = serializedObject.FindProperty("var2"); // the string is the name of your field
    }

    public override void OnInspectorGUI()
    {
        // the index of selected option
        index = EditorGUILayout.Popup(index, new string[] { "Option1", "etc" });

        object yourVal;

        switch (index)
        {
        case 0:
            yourVal = EditorGUILayout.FloatField(yourVal);
            break;
        /*
            and etc,
            you create the field in inspector you want for eevery index

            but tbh, that's a bad idea to do so
        */
        }

        serializedObject.ApplyModifiedProperties();
    }
}

相关问题