SceneManager.LoadScene(字符串)无法识别场景名称

时间:2017-06-30 03:46:54

标签: unity3d menu

我在互联网上看到过类似的问题,但似乎没有一个适用于我的情况。

我有一个非常简单的项目,有两个场景:MainMenuSceneOtherSceneOtherScene只是一个空白画布,MainMenuScene只有一个按钮,用于导航到OtherScene。主摄像头附有以下脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LaunchScene : MonoBehaviour {

    public void LaunchSceneOnButtonClick(int index)
    {
        SceneManager.LoadScene(index);
    }

    public void LaunchSceneOnButtonClick(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }
}

并在按钮的OnClick()中调用此脚本。我已确保将两个级别添加到构建设置。

如果我调用带有整数参数的LanchSceneOnButtonClick版本(并在OnClick()方法中指定适当的值),则会加载所需的场景。

然而,如果我调用带有字符串参数的版本并使用我要加载的场景的确切名称(我已经四倍检查它确实是确切的字符串,那个字符串名称没有空格或隐藏字符,并且将场景名称复制粘贴到OnClick()参数字段中)场景未加载,而是我收到错误消息

  

无法加载场景“OtherScene”,因为尚未添加   尚未加载构建设置或AssetBundle。

由于使用场景索引有效,我们知道它已正确添加到构建设置中,因此我认为场景名称存在一些问题。但我完全复制了它。我想避免使用场景的完整路径以防我后来决定将场景移动到不同的文件夹,那么我的选择是什么?

提前致谢。

修改

添加屏幕截图。

文件夹结构中的场景:

enter image description here

构建设置中的场景:

enter image description here

OnClick()输入:

enter image description here

enter image description here

请注意,我还尝试使用带引号和不带引号的OnClick()输入。

2 个答案:

答案 0 :(得分:1)

唯一可能的问题是:

  • 传递的字符串与场景名称不同;请注意,LoadScene中使用的字符串区分大小写,即您可以使用OtherSceneOTHERscene等。
  • 构建设置中的场景未激活(即禁用左侧的复选标记)。
  • 构建设置中根本不存在场景。

场景的完整路径是无关紧要的,你可以在资产中的任何目录/子目录中有OtherScene,你只需要场景的名称。只有当你在不同的路径中拥有相同名称的场景时,才需要场景的完整路径(无论如何你不应该,这是一个非常明显的可怕做法)。

编辑:你说你甚至没有"就试过了(正如你应该做的那样,当你在检查员中输入string字段时你不需要它们),如果修改方法体,会发生什么?到:

public void LaunchSceneOnButtonClick(string sceneName)
{
    SceneManager.LoadScene("OtherScene");
}

试试这个并报告请发生的事情。

答案 1 :(得分:0)

我也有这个问题

public void loadScene(string scene)
{
        SceneManager.LoadScene(scene);
}

一开始对我不起作用。我做了什么?我将场景名称保存在一个列表中(从文件中读取),然后从该列表中选择我需要的场景。

但不知何故,阅读进度似乎给了我一些不需要的角色,因此场景加载无法按预期工作。当我添加 .Trim() 它开始工作。

为了更好地理解,这里有一个例子:

string s = sceneList[1].Trim();

this.loadScene(s);

public void loadScene(string scene)
{
        SceneManager.LoadScene(scene);
}

因此请确保删除不需要的字符。