如何在Unity中检查一个构建中的场景数量?

问题描述 投票:0回答:1

我正在Unity中构建一个有许多场景(也就是关卡)的手机游戏,我还打算在游戏生命周期的后期通过更新来添加更多的关卡。为了解决这个问题,我试图制作一个自动脚本,查看Unity构建的游戏中有多少场景,并根据预制件创建相应的UI按钮。

为了清楚起见,我会注意,当我说 "Unity Build中的场景 "时,我指的是构建菜单中的场景。

enter image description here

而且已经有一个索引号的场景

这不是很多,但这是我当前的脚本,我在场景中设置了一个levelManager。

    private Scene[] levels;

    private void Start()
    {
        /// This is the line I'm requesting help with
        levels = // Some way of getting all the scene's in a project put in an array


        foreach (var item in levels)
        {
            // I will handle the button creation and modification later that will go here
        }

    }
c# unity3d
1个回答
1
投票

如上所述,你不需要自己创建那个变量,而是可以简单地读出以下内容: 1. SceneManager.sceneCountInBildSettings 再用 SceneManager.GetSceneByBuildIndex 为了迭代并获得所有这些场景,如

// Adjust this in the Inspector
// Set this to the index of level 1
[SerializeField] private int startIndex = 1;

var sceneCount = SceneManager.sceneCountInBildSettings;
levels = new Scene[sceneCount - startIndex];
for(var i = startIndex; i < sceneCount; i++)
{
    level[i] = SceneManager.GetSceneByBuildIndex(i);
}

另外,你也可以在运行前通过编辑脚本,使用 EditorBuildSettings.scenes 例如

#if UNITY_EDITOR
using UnityEditor;
#endif

...

// Make this field serialized so it gets stored together with the scene
[SerializeField] private Scene[] levels;

#if UNITY_EDITOR
    [ContextMenu(nameof(StoreScenes))]
    private void StoreScenes()
    {
        levels = EditorBuildSettings.scenes;
        EditorUtility.SetDirty(this);    
        EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
    }
#endif

你可以在构建前运行这个方法,进入组件的检查器,打开上下文菜单并点击 StoreScenes 然后它就会填满你的数组。阵列中的 #if UNITY_EDITOR 必须使用 UnityEditor 命名空间,因为它将在构建中被剥离,否则你会得到构建异常。

© www.soinside.com 2019 - 2024. All rights reserved.