场景未加载

时间:2017-08-28 15:15:29

标签: c# unity3d unity5

共有9个场景。所有都添加在"构建设置"中。 9个中的7个场景正在加载,但当我尝试加载其他2个场景时,它一直在说:

  

场景' SceneName'无法加载,因为它尚未添加到构建设置或尚未加载AssetBundle。要将场景添加到构建设置,请使用菜单File-> Build Settings ... UnityEngine.SceneManagement.SceneManager:LoadSceneAsync(String,LoadSceneMode)MoreMountains.CorgiEngine.c__Iterator0:MoveNext()(在Assets / CorgiEngine / Common / Scripts中) /Managers/LoadingSceneManager.cs:88)UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)MoreMountains.CorgiEngine.LoadingSceneManager:Start()(在Assets / CorgiEngine / Common / Scripts / Managers / LoadingSceneManager.cs:67)

Here is my "Scene In Build" Image

我已经在场景管理器中添加了场景,但它一直显示此错误。我已经尝试过这么多。请帮我解决问题。这是我的#34; LoadingSceneManager"脚本:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using MoreMountains.Tools;
using UnityEngine.SceneManagement;

namespace MoreMountains.CorgiEngine
{   
public class LoadingSceneManager : MonoBehaviour 
{
    [Header("Binding")]
    /// The name of the scene to load while the actual target scene is 
    loading (usually a loading screen)
    public static string LoadingScreenSceneName="LoadingScreen";

    [Header("GameObjects")]
    /// the text object where you want the loading message to be displayed
    public Text LoadingText;
    /// the canvas group containing the progress bar
    public CanvasGroup LoadingProgressBar;
    /// the canvas group containing the animation
    public CanvasGroup LoadingAnimation;
    /// the canvas group containing the animation to play when loading is complete
    public CanvasGroup LoadingCompleteAnimation;

    [Header("Time")]
    /// the duration (in seconds) of the initial fade in
    public float StartFadeDuration=0.2f;
    /// the speed of the progress bar
    public float ProgressBarSpeed=2f;
    /// the duration (in seconds) of the load complete fade out
    public float ExitFadeDuration=0.2f;
    /// the delay (in seconds) before leaving the scene when complete
    public float LoadCompleteDelay=0.5f;

    protected AsyncOperation _asyncOperation;
    protected static string _sceneToLoad = "";
    protected float _fadeDuration = 0.5f;
    protected float _fillTarget=0f;
    protected string _loadingTextValue;

    /// <summary>
    /// Call this static method to load a scene from anywhere
    /// </summary>
    /// <param name="sceneToLoad">Level name.</param>
    public static void LoadScene(string sceneToLoad) 
    {       
        _sceneToLoad = sceneToLoad;                 
        Application.backgroundLoadingPriority = ThreadPriority.High;
        if (LoadingScreenSceneName!=null)
        {
            SceneManager.LoadScene(LoadingScreenSceneName);
        }
    }

    /// <summary>
    /// On Start(), we start loading the new level asynchronously
    /// </summary>
    protected virtual void Start() 
    {
        _loadingTextValue=LoadingText.text;
        if (_sceneToLoad != "")
        {
            StartCoroutine(LoadAsynchronously());
        }
    }

    /// <summary>
    /// Every frame, we fill the bar smoothly according to loading progress
    /// </summary>
    protected virtual void Update()
    {
        LoadingProgressBar.GetComponent<Image>().fillAmount = MMMaths.Approach(LoadingProgressBar.GetComponent<Image>().fillAmount,_fillTarget,Time.deltaTime*ProgressBarSpeed);
    }

    /// <summary>
    /// Loads the scene to load asynchronously.
    /// </summary>
    protected virtual IEnumerator LoadAsynchronously() 
    {
        // we setup our various visual elements
        LoadingSetup();

        // we start loading the scene
        _asyncOperation = SceneManager.LoadSceneAsync(_sceneToLoad,LoadSceneMode.Single );
        _asyncOperation.allowSceneActivation = false;

        // while the scene loads, we assign its progress to a target that we'll use to fill the progress bar smoothly
        while (_asyncOperation.progress < 0.9f) 
        {
            _fillTarget = _asyncOperation.progress;
            yield return null;
        }
        // when the load is close to the end (it'll never reach it), we set it to 100%
        _fillTarget = 1f;

        // we wait for the bar to be visually filled to continue
        while (LoadingProgressBar.GetComponent<Image>().fillAmount != _fillTarget)
        {
            yield return null;
        }

        // the load is now complete, we replace the bar with the complete animation
        LoadingComplete();
        yield return new WaitForSeconds(LoadCompleteDelay);

        // we fade to black
        GUIManager.Instance.FaderOn(true,ExitFadeDuration);
        yield return new WaitForSeconds(ExitFadeDuration);

        // we switch to the new scene
        _asyncOperation.allowSceneActivation = true;
    }

    /// <summary>
    /// Sets up all visual elements, fades from black at the start
    /// </summary>
    protected virtual void LoadingSetup() 
    {
        GUIManager.Instance.Fader.gameObject.SetActive(true);
        GUIManager.Instance.Fader.GetComponent<Image>().color=new Color(0,0,0,1f);
        GUIManager.Instance.FaderOn(false,ExitFadeDuration);

        LoadingCompleteAnimation.alpha=0;
        LoadingProgressBar.GetComponent<Image>().fillAmount = 0f;
        LoadingText.text = _loadingTextValue;

    }

    /// <summary>
    /// Triggered when the actual loading is done, replaces the progress bar with the complete animation
    /// </summary>
    protected virtual void LoadingComplete() 
    {
        LoadingCompleteAnimation.gameObject.SetActive(true);
        StartCoroutine(MMFade.FadeCanvasGroup(LoadingProgressBar,0.1f,0f));
        StartCoroutine(MMFade.FadeCanvasGroup(LoadingAnimation,0.1f,0f));
        StartCoroutine(MMFade.FadeCanvasGroup(LoadingCompleteAnimation,0.1f,1f));

    }
}

}

7 个答案:

答案 0 :(得分:3)

您是否已将尝试加载的场景添加到构建设置&#34;场景中的场景&#34;部分? 这需要使用scenemanager切换到项目内的任何场景。

enter image description here

答案 1 :(得分:1)

我知道这个问题很旧,但是我的答案对于某些遇到这个问题的人仍然很有价值。添加到建筑物中的场景应避免使用更多奇特的角色,例如德国变音符“äöÜß”或simmilar。而且最好也避免使用空格字符-因为它们可能包含其他一些符号,然后您怀疑并因此引起麻烦。特别是当您复制并粘贴它们的名称时。因此,最好坚持使用纯ASCII字母,并用连字符或下划线替换所有空格。

答案 2 :(得分:0)

GO文件 - &gt;和构建设置确保框中包含所有场景。enter image description here

答案 3 :(得分:0)

或者你可以使用它们的索引值来更简单的方法,而不是使用字符串

SceneManager.LoadScene(0);

然后通过打开构建设置窗口

添加所有这些场景

答案 4 :(得分:0)

看起来你试图用名称加载场景:'SceneName'。

  1. 检查功能参数是否具有正确的值。
  2. 尝试使用索引而不是名称加载有问题的场景。

答案 5 :(得分:0)

请检查您的功能“LoadScene”。

我不确定究竟是什么问题,但是根据您的日志问题出现在“LoadScene”功能中。

答案 6 :(得分:0)

由于某种原因,我在“构建设置”中正确添加了所有场景,但是在编辑器中运行游戏时仍然抛出错误(为Android构建没有问题)。

我刚刚从“构建设置”中删除了所有场景,然后又重新添加了它们。之后就没问题了。