Unity3d自动设置场景到BuildSettings的方法

再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版权协议,转载请附上原文出处链接和本声明。