AddScene Additive делает новую сцену слишком яркой - PullRequest
0 голосов
/ 30 ноября 2018

Я хотел бы показать сцену инвентаря, если игрок нажимает клавишу I.

В этой сцене инвентаря должен быть показан объект героя, и им нужно манипулировать (например, текущее оружие должно бытьизменилось в этой сцене), поэтому MoveGameObjectToScene показался идеальным для этого.

Поэтому я следовал этому совету и в основном сделал следующее, что я изложил ниже.

Работает нормально, но проблема в том, что предыдущая сцена все еще показана.Я думал, что «Добавка» означает, что предыдущая сцена не разрушена, а скрыта.Но, очевидно, это даже не скрыто.Это действительно перекрывает предыдущую сцену.

Физическое удаление его на самом деле не помогает, так как огни из сцены 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 голосов
/ 30 ноября 2018

Загрузка сцены «аддитивно» - это не то, что я бы использовал для этого (вы уже видели проблему, аддитивность означает, что предыдущие объекты не уничтожаются при загрузке предыдущей сцены, но они не изменяются никоим образом, недаже скрыто).

Вместо этого у вас может быть несколько камер, каждая со своей «маской отбора».Тогда у меня была бы «Камера инвентаря», которая показывает только предметы из инвентаря, и ничего более.«Основная камера» будет иметь маску отбраковки, которая показывает все, кроме объектов инвентаря.

Для определения маски отбраковки вам необходимо определить слои.Вот некоторые документы: https://docs.unity3d.com/Manual/class-Camera.html

Затем вы можете отключить «Основную камеру» и включить «Инвентарную камеру» каждый раз, когда пользователь нажимает «I».Это делается с помощью Camera.main .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...