首页 > 解决方案 > Unity EditorWindow - 从窗口切换游戏对象

问题描述

我使用 Unity 已经有一段时间了,但从未尝试过编辑器。今天我决定尝试制作一个 EditorWindow 来帮助我的开发捷径。

我想要的是单击窗口上的按钮来打开和关闭场景中的特定灯光。

在下面添加了代码和窗口的图像。

我不知道如何进行。任何帮助将不胜感激!

public class DevTools : EditorWindow
{
    public Object workLight;

    [MenuItem("Window/DevTools")]
    public static void ShowWindow()
    {
        GetWindow<DevTools>("Development Tools");
    }

    private void OnGUI()
    {
        GUILayout.Label("This is the development tools.", EditorStyles.boldLabel);

        workLight = EditorGUILayout.ObjectField(workLight, typeof(object), true);

        if (GUILayout.Button("Working Light"))
        {
            if(workLight == null)
            {
                ShowNotification(new GUIContent("No light selected"));
            }
            else
            {

            }
        }
    }
}

这是我当前的窗口

标签: c#visual-studiounity3d

解决方案


非常感谢查理!

稍微改写一下,这似乎奏效了。不确定它是否完美优化,但它可以顺利工作(atm):p。

public class DevTools : EditorWindow
{
    Object workLight = default;

    [MenuItem("Window/DevTools")]
    public static void ShowWindow()
    {
        GetWindow<DevTools>("Development Tools");
    }
    private void OnGUI()
    {
        GUILayout.Label("This is the development tools.", EditorStyles.boldLabel);
        if (GUILayout.Button("Working Light"))
        {
            if (workLight == null)
            {
                ShowNotification(new GUIContent("No light selected"));
            }
            else
            {
                var light = GameObject.Find("Work Light");
                if (light == null)
                {
                    ShowNotification(new GUIContent("Selected object is not a light"));
                    return;
                }
                else
                {
                    light.gameObject.GetComponent<Light>().enabled = !light.gameObject.GetComponent<Light>().enabled;
                }
            }
        }
    }
}

推荐阅读