Как использовать один объект, выбранный из предыдущей сцены, в текущей сцене?

Я работаю над игрой FPS. Это моя первая сцена в сцене главного меню. Что нормально. Во второй сцене пользователь выбирает пистолет, который он хочет использовать (их четыре). Когда он нажимает кнопку воспроизведения, я загружаю новую сцену (gamePlay). Как я могу отслеживать оружие, которое выбрал пользователь? итак, он может использовать это оружие в игре? это легко, когда вы работаете в одной сцене, переключая камеру. Но как это сделать в новой сцене?


person Waqas Majeed    schedule 03.04.2014    source источник


Ответы (2)


Вот как я поступал, и это действительно хорошо работает.

Реализуйте синглтон, производный от MonoBehaviour, чтобы удерживать выбор пользователя между меню и который не будет уничтожен при загрузке нового уровня.

Пример синглтона

public class UserChoices : MonoBehaviour 
{
    public static UserChoices Instance = null;

    // just an example, add more as you like
    public int gun;

    void Awake()
    {
         DontDestroyOnLoad(this.gameObject);
         if(Instance == null)
         {
             Instance = this;
         } else if(Instance != this)
         {
             Destroy(this.gameObject);
         }
     }
}

Теперь вам просто нужно сделать это один раз:

  1. Создайте пустой GameObject
  2. Прикрепите к нему этот скрипт и затем сохраните как сборный
  3. Перетащите его тоже каждую сцену, которая в нем нуждается

Теперь вы можете легко сохранять и читать выбор пользователя между сценами:

// read chosen gun
int chosen_gun = UserChoises.Intance.gun;

//save chosen gun
UserChoises.Intance.gun = PlayerGuns.Knife;

Кстати, я обычно создаю свойства вместо того, чтобы обращаться к просто общедоступным переменным, потому что мне нравится контролировать, какие значения присваиваются (проверка, дополнительное поведение и т. д.)

Использованная литература:

MonoBehaviour

DontDestroyOnLoad

person letiagoalves    schedule 04.04.2014

Вы можете настроить GameObjects, которые выбирает пользователь, чтобы они не уничтожались автоматически. Взгляните на DontDestroyOnLoad.

Таким образом они сохраняются при смене сцен.

Вероятно, вам нужно будет сделать их неактивными, пока вы находитесь на экранах выбора.

person Radu Diță    schedule 03.04.2014