Как-то так, читай комменты в коде и всё поймёшь:
void Update()
{
// Если нажат пробел — запускаем сопрограмму
if (Input.GetKeyDown(KeyCode.Space))
{
// Coroutine при фоновой загрузке обязателен
StartCoroutine(Restart());
}
}
IEnumerator Restart()
{
// Начинаем загрузку сцены
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("menu");
// Ждём, пока сцена полностью загрузится
while (!asyncLoad.isDone)
{
// Прерываемся, раз ещё не загружено
yield return null;
}
// Выгрузить единственную открытую сцену нельзя
// Сперва загружаем, а потом выгружаем
SceneManager.UnloadSceneAsync("game");
}