Не могу вернуться в главное меню, нажав кнопку «Оставить»C#

Место общения программистов C#
Anonymous
Не могу вернуться в главное меню, нажав кнопку «Оставить»

Сообщение Anonymous »

Я создаю игру под названием «Gravity Shifter», и в своей игре я не могу вернуться в главное меню со сцены 1 -го уровня, когда играю. У меня есть код, который пытается вернуться в главное меню, но он не работает. Кроме того, когда я нажимаю кнопку «Оставьте игру», чтобы вернуться в главное меню, я снова вернусь в сцену уровня 1.

Код: Выделить всё

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneLoader : MonoBehaviour
{
public static GameObject backupCamera;  // Yedek kamera referansı
public static SceneLoader instance; // Singleton instance

private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
return;
}
}

public static void LoadScene(string sceneName)
{
instance.StartCoroutine(LoadSceneCoroutine(sceneName));
}

// LoadScene functionu oyuna ozel yapilmis sceneload yapan functur bu funcu leavegamebutton, restartbutton vb.  leri icin olusturulmustur.
public static IEnumerator LoadSceneCoroutine(string sceneName)
{
if (backupCamera != null)
{
backupCamera.SetActive(true); // Sahne geçişi sırasında backup kamera aktif olsun
}

if (sceneName == SceneNames.MainMenu) // MainMenu'ye dönüş
{
DestroyPersistentObjects();
yield return PersistentSceneLoader.instance.StartCoroutine(PersistentSceneLoader.UnloadPersistentScene());

AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single);
while (!asyncLoad.isDone)
{
yield return null; // MainMenu yüklenene kadar bekle
}
}
else
{
yield return instance.StartCoroutine(UnloadAllLevels());

yield return PersistentSceneLoader.instance.StartCoroutine(PersistentSceneLoader.EnsurePersistentSceneLoaded());

AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
while (!asyncLoad.isDone)
{
yield return null; // Yükleme bitene kadar bekle
}

if (backupCamera != null)
{
Debug.Log("Backup kamera KAPANIYOR...");
backupCamera.SetActive(false);
}
}
}

private static IEnumerator UnloadAllLevels()
{
for (int i = 0; i < SceneManager.sceneCount; i++)
{
Scene scene = SceneManager.GetSceneAt(i);
if (scene.name != SceneNames.PersistentScene && scene.name != SceneNames.MainMenu)
{
// Sahne yüklüyse, unload et
if (scene.isLoaded)
{
yield return SceneManager.UnloadSceneAsync(scene);
}
}
}
}

public static void DestroyPersistentObjects()
{
GameObject[] dontDestroyObjects = GameObject.FindObjectsOfType();

foreach (GameObject obj in dontDestroyObjects)
{
if (obj.scene.buildIndex == -1 && obj != backupCamera)
{
Destroy(obj);
}
}

// Backup kamera da sahne geçişlerinde düzgün sıfırlanmalı
if (backupCamera != null)
{
Debug.Log("Backup kamera devre dışı bırakıldı ve siliniyor...");
Destroy(backupCamera);
backupCamera = null;
}
}
}
leavegamebutton.cs

Код: Выделить всё

using UnityEngine;

public class LeaveGameButton : MonoBehaviour
{
public GameObject backupCamera;

public void LeaveToMainMenu()
{
// camera
if (backupCamera != null)
{
Debug.Log("Restart: Backup kamera atanıyor...");
SceneLoader.backupCamera = backupCamera;
}
else
{
Debug.LogWarning("Restart: Backup kamera NULL!");
}

// Scene load
if (SceneLoader.instance != null)
{
SceneLoader.LoadScene(SceneNames.MainMenu);
}
else
{
Debug.LogError("SceneLoader instance is NULL! Make sure SceneLoader is in the scene.");
}

// camera
if (backupCamera != null)
{
Debug.Log("Restart: Backup kamera devre dışı bırakıldı.");
backupCamera.SetActive(false);
}
}
}
Как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ave-button

Вернуться в «C#»