我正在Unity中构建一个有许多场景(也就是关卡)的手机游戏,我还打算在游戏生命周期的后期通过更新来添加更多的关卡。为了解决这个问题,我试图制作一个自动脚本,查看Unity构建的游戏中有多少场景,并根据预制件创建相应的UI按钮。
为了清楚起见,我会注意,当我说 "Unity Build中的场景 "时,我指的是构建菜单中的场景。
而且已经有一个索引号的场景
这不是很多,但这是我当前的脚本,我在场景中设置了一个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
}
}
如上所述,你不需要自己创建那个变量,而是可以简单地读出以下内容: 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
命名空间,因为它将在构建中被剥离,否则你会得到构建异常。