研究了个打开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()
{
EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
}
private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
{
if (Event.current.type == EventType.MouseDown)
{
AddCurrentSceneToBuild();
}
}
private static void AddCurrentSceneToBuild()
{
string scenePath = EditorSceneManager.GetActiveScene().path;
EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
bool sceneAlreadyAdded = false;
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;
}
}
}