Как я могу получить ссылку на игровой объект из другой сцены? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть две сцены. Главное меню и игровой процесс сцены. Все мои объекты в моей игре находятся под одним родительским игровым объектом, который называется Main Game. И этот объект отключен при запуске игры. Сначала активируется сцена главного меню.

Когда я нажимаю кнопку «ВОСПРОИЗВЕДЕНИЕ» в главном меню, я хочу установить значение true для объекта Основной игры в другой сцене.

Main Menu

Этот скрипт прикреплен к игровому объекту Главного меню:

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

public class MainMenu : MonoBehaviour
{
    public void PlayGame()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1, LoadSceneMode.Additive);

        var mainGame = GameObject.FindGameObjectWithTag("Main Game");
        mainGame.SetActive(true);
    }

    public void QuitGame()
    {
        Application.Quit();
    }
}

Я пытался использовать FindGameObjectWithTag, но переменная mainGame пуста.

И этот скриптприкреплен к игровому объекту Назад в главное меню:

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

public class BackToMainMenu : MonoBehaviour
{
    // Variables
    private bool _isInMainMenu = false;
    public GameObject mainGame;

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (!_isInMainMenu)
            {
                SceneManager.LoadScene(0, LoadSceneMode.Additive);

                // -- Code to freeze the game
                mainGame.SetActive(false);
            }
            else
            {
                SceneManager.UnloadSceneAsync(0);
                // -- Code to unfreeze the game
                mainGame.SetActive(true);
            }

            _isInMainMenu = !_isInMainMenu;
        }
    }
}

Логика, как мне кажется, должна быть:

  1. Начало игры со сценой главного меню.

  2. Кнопка PLAY для запуска новой игры.

  3. Клавиша ESCAPE для приостановки / возобновления игры.

Номер 3, если нажать клавишу выхода один раз, чтобы вернуться в главное меню, а затем еще раз нажать клавишу выхода, чтобы вернуться и возобновить игру с текущей точки, либо если она находится в середине сцены вырезания, либо просто простаивает в игре.

Моя первая проблема - получить ссылку на объект Main Game в Mai. n Сцена меню.

Я использую LoadSceneMode.Additive, потому что я не хочу загружать каждый раз другую сцену, а переключаться между ними, поэтому все игровые объекты игровой сцены находятся в Основной игре.

1 Ответ

1 голос
/ 02 октября 2019

Даниэль,

Один из способов добиться этого - предоставить статическую ссылку на объект Основной игры. Это будет доступно кросс-сцене. Например,

using UnityEngine;

public class GameManager: MonoBehaviour
{
    [SerializeField]
    private GameObject mainGame;

    public static GameObject MainGame {get;private set;}

    void Awake(){
        GameManager.MainGame = mainGame;
    }

}

Теперь вы можете ссылаться на объект mainGame в вашем скрипте MainMenu через GameManager.MainGame

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