LoadScene Additive使新场景变得太亮

时间:2018-11-30 16:02:12

标签: unity3d

如果玩家按下I键,我想显示一个清单场景。

在此清单场景中,应该显示英雄对象,并对其进行操作(例如,在该场景中应更改当前武器),因此MoveGameObjectToScene似乎很适合。

因此,我遵循了this advice,基本上遵循了以下内容。

它工作正常,但是问题在于仍然显示了前一个场景。我以为“加法”是指先前的场景没有被破坏,而是被隐藏了。 但是显然,它甚至没有被隐藏。它确实与以前的场景重叠。

将其物理移除并没有太大帮助,因为场景1中的灯光已添加到场景2中。

我已经关闭了两个场景的“自动生成照明”。

enter image description here

可能是什么原因造成的?

非常感谢您的任何建议!

public class PlayerScript : MonoBehaviour
{
public GameObject UIRootObject;
private AsyncOperation sceneAsync;

void Update()
{
    if (Input.GetKeyDown(KeyCode.I))
    {
        StartCoroutine(loadScene(1));
    }
}
IEnumerator loadScene(int index)
{
    AsyncOperation scene = SceneManager.LoadSceneAsync(index, LoadSceneMode.Additive);
    scene.allowSceneActivation = false;
    sceneAsync = scene;

    //Wait until we are done loading the scene
    while (scene.progress < 0.9f)
    {
        Debug.Log("Loading scene " + " [][] Progress: " + scene.progress);
        yield return null;
    }
    OnFinishedLoadingAllScene();
}

void enableScene(int index)
{
    //Activate the Scene
    sceneAsync.allowSceneActivation = true;

    Scene sceneToLoad = SceneManager.GetSceneByBuildIndex(index);
    if (sceneToLoad.IsValid())
    {
        Debug.Log("Scene is Valid");
        SceneManager.MoveGameObjectToScene(UIRootObject, sceneToLoad);
        SceneManager.SetActiveScene(sceneToLoad);
    }
}

void OnFinishedLoadingAllScene()
{
    Debug.Log("Done Loading Scene");
    enableScene(1);
    Debug.Log("Scene Activated!");
}

}

1 个答案:

答案 0 :(得分:1)

“加性”加载场景不是我要用的(您已经看到了问题,加性意味着加载前一个场景时不会破坏先前的对象,但是不会以任何方式修改它们,而不是甚至是隐藏的。)

相反,您可以有多个摄像机,每个摄像机都有自己的“消光蒙版”。然后,我将有一个“库存相机”,仅显示库存中的对象,仅此而已。 “主摄像机”将具有一个剔除蒙版,可以显示除库存对象之外的所有内容。

要定义剔除蒙版,您需要定义图层。这里是一些文档:https://docs.unity3d.com/Manual/class-Camera.html

然后您可以在用户每次按“ I”时禁用“主摄像机”并启用“库存摄像机”。这是通过Camera.main完成的。

希望这会有所帮助。