Я предложу вам добавить main menu scene
с флагом Additive
, как вы упомянули.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class BackToMainMenu : MonoBehaviour
{
// Variables
private bool _isInMainMenu = false;
public PlayerCameraMouseLook cammouselook;
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (!_isInMainMenu)
{
SceneManager.LoadScene(0, LoadSceneMode.Additive);
PlayerCameraMouseLook.mouseLookEnable = false;
cammouselook.enabled = true;
// -- Code to freeze the game
}
else
{
SceneManager.UnloadSceneAsync(0);
// -- Code to unfreeze the game
}
_isInMainMenu = !_isInMainMenu;
}
}
}
Посмотрите на переменную _isInMainMenu
: она будет отслеживать, если вы находитесь вГлавное меню или нет. В зависимости от значения, Клавиша Escape будет вести себя по-разному.
Примечание: Я предлагаю вам ввести текущий индекс сцены в LoadScene / UnloadSceneAsync
, если только выможет захотеть изменить свой индекс. В этом сценарии введите имя сцены (перегруженные методы).
Теперь, что я имею в виду под // -- Code to freeze the game
, зависит от вашей игры:
- У вас может быть уникальный GameObject, содержащий вседругие GameObjects имеют вашу сцену, и
Enable / Disable
it
myBigGameObject.SetActive(true/*or false*/);
- В MonoBehaviour есть логика заморозить игру, пока вы находитесь в главном меню. Например, вы можете использовать bool
_isInMainMenu
в Update () , чтобы помешать им выполнять свою работу;
Например, в этом MonoBehaviour, который я создал в качестве примера:
public class ExampleMonoBehaviour : MonoBehaviour
{
private void Update ()
{
if (_isInMainMenu)
return;
print("I'm running !");
}
}
- Иметь коллекцию (список в качестве примера), в которой хранятся каждые
top hierarchy GameObjects
и включать / отключать их все по мере необходимости, чтобы они вели себя так же, как указано выше.
Зависитна то, как ваш код, есть много других вариантов. Я настоятельно рекомендую вам сделать вариант первый или третий , если у вас нет лучшего подхода.
Дело в том, что если вы хотите вернуться кГлавное меню, оно не должно быть слишком обширным (время загрузки, использование памяти и т. д.), поэтому вы можете отключить GameObject из main scene
(третий пункт), чтобы быстро восстановить его после выхода из main menu
без перезагрузкився сценаЭто приведет к использованию сериализации и десериализации.
Отредактировано: Typo