现在我有一些可能导致问题的代码。

问题描述 投票:0回答:1

PlayerManager.cs

using UnityEngine; public class PlayerManager : MonoBehaviour { private static PlayerManager instance; public static PlayerManager Instance { get { return instance; } } public GameObject player; public Vector3 startingPosition; // starting position when game restarts or starts private void Awake() { // Singleton yapısı if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); // PlayerManager, sahne geçişlerinde yok edilmez } else { Destroy(gameObject); // Aynı PlayerManager birden fazla sahnede varsa, yalnızca biri kalır. } } public void ResetPlayerPosition() { if (player != null) { player.transform.position = startingPosition; // Oyuncuyu sıfırla } else { Debug.LogWarning("Player object is not assigned."); } } // Oyuncuyu Don't Destroy'dan çıkar ve sil public void RemovePlayerFromDontDestroy() { Destroy(gameObject); } }

RestartGameButton.cs

using UnityEngine;
using UnityEngine.UI;

public class RestartGameButton : MonoBehaviour
{
    public GameObject backupCamera; // Yedek kamera referansı (Inspector'dan atanacak)
    public void RestartGameFromBeginning()
    {
        // Yedek kamerayı SceneLoader'a aktar
        SceneLoader.backupCamera = backupCamera;

        // Singleton üzerinden GameManager'a erişip RestartGame fonksiyonunu çağır
        if (GameManager.instance != null)
        {
            GameManager.instance.RestartGame();  // GameManager üzerinden oyunu sıfırla
        }
        else
        {
            Debug.LogError("GameManager instance is not found!");
        }

        SceneLoader.LoadScene(2);  // level1'i yuklemek icin 
    }
}

SceneLoader.cs

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneLoader : MonoBehaviour
{
    public static GameObject backupCamera;  // Yedek kamera referansı
    private static string uiSceneName = "PersistentScene"; // UI'nin sahne adı

    public static void LoadScene(int sceneIndex)
    {
        // Eğer ana menüye dönülüyorsa, tüm sahneleri temizle
        if (sceneIndex == 1)
        {
            DestroyPersistentObjects();
            SceneManager.LoadScene(sceneIndex);
        }
        else
        {
            // Yeni sahneyi yükle (UI kaybolmaz)
            SceneManager.LoadScene(sceneIndex, LoadSceneMode.Single);

            // Eğer UI sahnesi yüklü değilse yükle
            if (!SceneManager.GetSceneByName(uiSceneName).isLoaded)
            {
                SceneManager.LoadScene(uiSceneName, LoadSceneMode.Additive);
            }

            // Yedek kamerayı aç
            if (backupCamera != null)
            {
                backupCamera.SetActive(true);
            }
        }
    }

    // Bu sadece ana menüye dönüş için kullanılır
    private static void DestroyPersistentObjects()
    {
        GameObject[] dontDestroyObjects = GameObject.FindObjectsOfType<GameObject>();

        foreach (GameObject obj in dontDestroyObjects)
        {
            if (obj.scene.buildIndex == -1)  // Eğer sahneye bağlı değilse (DontDestroyOnLoad)
            {
                Destroy(obj);
            }
        }
    }
}
我希望除主菜单以外的每个级别场景中都存在persistentscene。

谢谢你!

    

在您的
Restartgamebutton

课程之后返回

gameManager.instance.restartGame();

由于这一行之后,您的代码继续到此行

Sceneloader.loadscene(2);

c# unity-game-engine user-interface
1个回答
0
投票
该行将在单个模式下以索引2加载场景,这将删除所有加载场景

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.