Unity3d LoadScene Addition使新场景过于明亮

Unity3d LoadScene Addition使新场景过于明亮,unity3d,Unity3d,如果玩家按下I键,我想显示一个库存场景 在这个清单场景中,应该显示英雄对象,并且应该对其进行操作(例如,在这个场景中应该更改当前武器),因此MoveGameObjectToScene似乎非常适合这个场景 因此,我遵循并基本上做到了我在下面所说的 它工作正常,但问题是仍然显示前一个场景。我认为“附加”意味着前一个场景不是被破坏的,而是隐藏的。 但很明显,它甚至没有被隐藏。它确实与前一个场景重叠 将其从物理上移开并没有真正的帮助,因为场景1中的灯光已添加到场景2中 我已经关闭了两个场景的“自动生成照

如果玩家按下I键,我想显示一个库存场景

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

因此,我遵循并基本上做到了我在下面所说的

它工作正常,但问题是仍然显示前一个场景。我认为“附加”意味着前一个场景不是被破坏的,而是隐藏的。 但很明显,它甚至没有被隐藏。它确实与前一个场景重叠

将其从物理上移开并没有真正的帮助,因为场景1中的灯光已添加到场景2中

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

这可能是什么原因造成的

非常感谢您的建议

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!");
}
公共类PlayerScript:MonoBehavior
{
公共游戏对象;
私有异步操作scenesync;
无效更新()
{
if(Input.GetKeyDown(KeyCode.I))
{
开始例行程序(加载场景(1));
}
}
IEnumerator加载场景(int索引)
{
AsyncOperation scene=SceneManager.LoadSceneAsync(索引,LoadSceneMode.Additional);
scene.allowSceneActivation=false;
场景同步=场景;
//等我们加载完场景
而(场景进度<0.9f)
{
Debug.Log(“加载场景”+“[]进度:“+scene.Progress”);
收益返回空;
}
OnFinishedLoadingAllScene();
}
void启用场景(int索引)
{
//激活场景
sceneAsync.allowSceneActivation=true;
场景sceneToLoad=SceneManager.GetSceneByBuildIndex(index);
if(sceneToLoad.IsValid())
{
Log(“场景有效”);
SceneManager.MoveGameObjectToScene(UIRootObject,sceneToLoad);
SceneManager.SetActiveScene(sceneToLoad);
}
}
void OnFinishedLoadingAllScene()
{
Log(“完成加载场景”);
使能场景(1);
Log(“场景激活!”);
}
}

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

相反,你可以有几个摄像头,每个摄像头都有自己的“剔除遮罩”。然后我会有一个“库存摄像机”,它只显示库存中的对象,其他什么都没有。“主摄影机”将有一个剔除遮罩,显示除库存对象以外的所有对象

要定义剔除遮罩,需要定义图层。以下是一些文档:

然后,您可以禁用“主摄像头”,并在用户每次按“I”时启用“库存摄像头”。这件事就这样结束了


希望这能有所帮助。

这对我不起作用,因为我有很多场景,我不想一次又一次地为每个场景重新创建相同的资源清册。相反,我只会禁用其他场景中的任何游戏对象,我希望这样做是一样的…?在这种情况下,您可以混合使用两种方法:在所有其他场景中添加库存场景,并且只在按下“I”键时更改相机。请注意,加载“additily”应该只执行一次,而不是在按下“I”时。似乎在库存场景中有第二个平行光->这两个灯光被添加