Unity编辑器扩展,自动选中当前场景功能。

研究了个打开build settings面板时自动选中当前场景的功能。
需求背景:起因是,目前负责的项目,是一个工程对应多个场景,每个场景隶属于一个项目,这样每次打包都需要手选要打包的场景,太麻烦了。
此方法不是最优方案,只是目前能找到的方法。
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;

public class BuildSettingsCallbacks : MonoBehaviour
{
    [InitializeOnLoadMethod]
    private static void Init()
    {
        // 添加Hierarchy面板进行操作时的回调
        EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
    }

    private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
    {
        // 在HierarchyWindow面板出发了鼠标点击
        if (Event.current.type == EventType.MouseDown)
        {
            // 执行的回调操作
            AddCurrentSceneToBuild();
        }
    }

    private static void AddCurrentSceneToBuild()
    {

        // 获取当前场景的路径
        string scenePath = EditorSceneManager.GetActiveScene().path;
        // 添加场景到构建设置
        EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
        bool sceneAlreadyAdded = false;//判断当前场景是否已经在build settings列表中
        int tempIndex = 0;
        for (int i = 0; i < scenes.Length; i++)
        {
            if (scenes[i].path == scenePath)
            {
                sceneAlreadyAdded = true;
                tempIndex = i;
                break;
            }
        }

        if (!sceneAlreadyAdded)
        {
            System.Array.Resize(ref scenes, scenes.Length + 1);
            scenes[scenes.Length - 1] = new EditorBuildSettingsScene(scenePath, true);
            EditorBuildSettings.scenes = scenes;
        }
        else
        {
            EditorBuildSettingsScene[] tempScenes = EditorBuildSettings.scenes;
            for (int i = 0; i < tempScenes.Length; i++)
            {
                tempScenes[i].enabled = tempIndex == i;
            }
            EditorBuildSettings.scenes = tempScenes;
        }
        // 保存设置
        //EditorSettings.Save();

        //会调用多次
        //Debug.Log("current scene name= " + scenePath);


    }
}
要在 Unity 编辑器扩展中随机选择场景中的对象,你可以使用以下方法: 1. 使用 Object.FindObjectsOfType() 方法获取当前场景中的所有对象,并将其存储到一个数组中。 2. 使用 Random.Range() 方法生成一个随机数,用它来选择数组中的一个随机索引。 3. 使用所选索引来获取数组中的随机对象。 这里是一个示例代码,它在 Unity 编辑器中创建了一个按钮,点击该按钮将随机选择场景中的一个 Cube 对象并将其设置为选中状态: ```csharp using UnityEditor; using UnityEngine; public class RandomObjectSelector : EditorWindow { [MenuItem("Window/Random Object Selector")] static void OpenWindow() { RandomObjectSelector window = GetWindow<RandomObjectSelector>(); window.Show(); } void OnGUI() { if (GUILayout.Button("Select Random Object")) { // 获取场景中所有的 GameObject 对象 GameObject[] objects = Object.FindObjectsOfType<GameObject>(); // 生成一个随机索引并获取随机对象 int randomIndex = Random.Range(0, objects.Length); GameObject randomObject = objects[randomIndex]; // 设置随机对象为选中状态 Selection.activeGameObject = randomObject; } } } ``` 请注意,这个示例只是一个基本的概念演示,你需要根据自己的场景和需求进行修改和优化。同时,这个示例中使用了 Unity 编辑器窗口来创建按钮,你可以将这个代码添加到你的自定义编辑器窗口中,或者将代码添加到自定义菜单项或工具栏按钮的回调函数中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值