当它们存储为对象数组时如何获取 Unity 场景名称
How do I get a Unity scene name when they are stored as an array of Objects
我有一个对象列表。它们是Unity场景。
public Object[] scenes;
我想用 unity 场景填充这个数组,作为存储它们应该在 Unity 的检查器中加载的顺序的便捷方式。
我试图使用 SceneManager 来加载一个使用此数组引用的关卡
public int currentSceneNumber = 0;
public void LoadNext()
{
if (scenes.Length >= currentSceneNumber + 1)
{
currentSceneNumber += 1;
SceneManager.LoadScene(scenes[currentSceneNumber].ToString());
}
else
{
Debug.Log("Level.cs: Unable to load next level.");
return;
}
}
但是将场景转成字符串导致'scenename(UnityEngine.SceneAsset)' (login(UnityEngine.SceneAsset)是问题部分,会导致如下错误
Scene 'prototype02_Scene (UnityEngine.SceneAsset)' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
To add a scene to the build settings use the menu File->Build Settings...
如何从数组中的场景对象中获取字符串形式的场景名称?
您不能在编辑器之外执行此操作。
当您使用 public UnityEngine.Object[] scenes;
保存场景时,Unity 将使用 SceneAsset
作为占位符来保存这些场景。
问题在于 SceneAsset
来自 UnityEditor
命名空间,这意味着您的代码 只能在编辑器 中使用 AssetDatabase. You can't build it to run on any standalone platform. You will get 如果您尝试构建项目,则会出错。
这是获取所有场景并将它们存储在数组中的方法(应该在编辑器中工作并构建):
public Scene[] scenes;
...
void initScenes()
{
int sceneCount = SceneManager.sceneCountInBuildSettings;
scenes = new Scene[sceneCount];
for (int i = 0; i < sceneCount; i++)
{
scenes[i] = SceneManager.GetSceneByBuildIndex(sceneCount);
}
}
您的加载代码:
SceneManager.LoadScene(scenes[currentSceneNumber].name);
如果您确定这是一个编辑器插件,而不是您需要构建的东西,或者 运行 在编辑器之外,那么这就是您的答案:
首先,您使用的对象名称与场景名称无关,因为 Object.ToString()
是一个覆盖函数,可以检索
对象的名称。
只需将对象数组转换为 SceneAsset
,然后从中访问场景的名称,而不是像您当前正在做的那样访问 Object
的名称。
SceneManager.LoadScene(((SceneAsset)scenes[currentSceneNumber]).name);
或
SceneAsset scene = scenes[currentSceneNumber] as SceneAsset;
SceneManager.LoadScene(scene.name);
我有一个对象列表。它们是Unity场景。
public Object[] scenes;
我想用 unity 场景填充这个数组,作为存储它们应该在 Unity 的检查器中加载的顺序的便捷方式。
我试图使用 SceneManager 来加载一个使用此数组引用的关卡
public int currentSceneNumber = 0;
public void LoadNext()
{
if (scenes.Length >= currentSceneNumber + 1)
{
currentSceneNumber += 1;
SceneManager.LoadScene(scenes[currentSceneNumber].ToString());
}
else
{
Debug.Log("Level.cs: Unable to load next level.");
return;
}
}
但是将场景转成字符串导致'scenename(UnityEngine.SceneAsset)' (login(UnityEngine.SceneAsset)是问题部分,会导致如下错误
Scene 'prototype02_Scene (UnityEngine.SceneAsset)' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
To add a scene to the build settings use the menu File->Build Settings...
如何从数组中的场景对象中获取字符串形式的场景名称?
您不能在编辑器之外执行此操作。
当您使用 public UnityEngine.Object[] scenes;
保存场景时,Unity 将使用 SceneAsset
作为占位符来保存这些场景。
问题在于 SceneAsset
来自 UnityEditor
命名空间,这意味着您的代码 只能在编辑器 中使用 AssetDatabase. You can't build it to run on any standalone platform. You will get
这是获取所有场景并将它们存储在数组中的方法(应该在编辑器中工作并构建):
public Scene[] scenes;
...
void initScenes()
{
int sceneCount = SceneManager.sceneCountInBuildSettings;
scenes = new Scene[sceneCount];
for (int i = 0; i < sceneCount; i++)
{
scenes[i] = SceneManager.GetSceneByBuildIndex(sceneCount);
}
}
您的加载代码:
SceneManager.LoadScene(scenes[currentSceneNumber].name);
如果您确定这是一个编辑器插件,而不是您需要构建的东西,或者 运行 在编辑器之外,那么这就是您的答案:
首先,您使用的对象名称与场景名称无关,因为 Object.ToString()
是一个覆盖函数,可以检索
对象的名称。
只需将对象数组转换为 SceneAsset
,然后从中访问场景的名称,而不是像您当前正在做的那样访问 Object
的名称。
SceneManager.LoadScene(((SceneAsset)scenes[currentSceneNumber]).name);
或
SceneAsset scene = scenes[currentSceneNumber] as SceneAsset;
SceneManager.LoadScene(scene.name);