再Unity3d开发过程中,如果添加了新的场景,不添加进BuildingSetting是无法进入的,而每次手动导入进去会很麻烦。
其次,在正式发布版本中,会使用Assetbundle来加载此Scene,又要将除开第一个场景外的场景移除。所以写了一个脚本来自动化实现。
public static string _SceneDir = Application.dataPath + "/Scene";
public static string _AssetSceneDir = "Assets/Scene";
public static string _FirstSceneName = "update.unity";
[MenuItem("Tools/Scene Tools/RefreshSceneToBuildSetting")]
public static void AutoAddScenesToBuildForEditor()
{
AutoAddScenesToBuild(false);
}
[MenuItem("Tools/Scene Tools/RefreshSceneToBuildSettingForPackage")]
public static void AutoAddScenesToBuildForPackage()
{
AutoAddScenesToBuild(true);
}先定义存放Scene的文件夹和正式版本中第一个默认的场景名,然后在工具栏中定义2个函数方法,参数用true/false来判断是否需要导入所有场景和只要一个
public static void AutoAddScenesToBuild(bool isPackage)
{
if (Directory.Exists(_SceneDir) == false)
{
Debug.LogError("场景目录不存在");
return;
}
string pattern = "*.unity";
string[] files = Directory.GetFiles(_SceneDir, pattern);
EditorBuildSettingsScene[] buildSettingScene = new EditorBuildSettingsScene[files.Length];
for (int i = 0; i < files.Length; i++)
{
string name = Packager.GetFileName(files[i]);
buildSettingScene[i] = GetBuidSettingScene(name, isPackage);
}
//设置场景
EditorBuildSettings.scenes = buildSettingScene;
Debug.Log("加载完成");
}
public static EditorBuildSettingsScene GetBuidSettingScene(string sceneName, bool isPackage)
{
bool enableScene = true;
if (isPackage) {
enableScene = sceneName == _FirstSceneName ? true : false;
}
string sceneAssetPath = _AssetSceneDir + "/" + sceneName;
return new EditorBuildSettingsScene(sceneAssetPath, enableScene);
}代码也比较简单,如果有问题请指出,谢谢!
版权声明:本文为whitebreeze原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。