Как спасти поплавок между сценами в единстве - PullRequest
0 голосов
/ 09 апреля 2020

Привет, я новичок в коде, и я действительно изо всех сил. Я просто пытаюсь создать простую систему ставок для игры в блэкджек, в которой вы делаете ставку, и ее значение сохраняется, а затем оно переносится в мою следующую сцену, которая будет игровой. Таким образом, в основном я создал кнопку в сцене с именем BetScene, когда кнопка нажата, она добавляет 25 к бета-монтированию и удаляет 25 из playeramount. Когда игрок доволен вложенными деньгами, он нажимает вторую кнопку PlaceBet. Когда эта кнопка нажата, игровая сцена загружается, поэтому я хочу сохранить сумму, которая была размещена, и отобразить ее на игровой сцене. Надеюсь, в этом есть смысл, мне действительно нужна помощь. Я действительно стараюсь учиться, спасибо

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Хорошо, так что сначала: этот сценарий не звучит так, как будто вы должны использовать несколько сцен, поэтому я бы сказал «пересмотреть вашу архитектуру и поток сцен в этом случае». Но я также здесь, чтобы ответить на ваш вопрос, поэтому давайте сделаем это вместо этого.

Отличным способом обмена данными между сценами является использование ScriptableObject в качестве контейнера данных. Вы просто создаете класс данных, которые вы хотите использовать в нескольких сценах, а затем создаете экземпляр вашего ScriptableObject в качестве актива в вашей папке активов.
Этот актив затем может быть назначен всем компонентам, которые необходимо использовать это для передачи данных. По сути, это похоже на текстуру, нарисованную в одной сцене и считанную из другой сцены.

Вы даже можете улучшить это, создав своего рода «привязку данных», используя эти ScriptableObject активы в качестве переменных. Об этом topi c, опубликованном в 2017 году, на канале Unitys YouTube много говорят: Unite Austin 2017 - Архитектура игры со скриптовыми объектами

0 голосов
/ 09 апреля 2020

Решение 1: Использование PlayerPrefs.

PlayerPrefs.SetFloat("HIGHSCORE", 123.45f);
float highscore = PlayerPrefs.GetFloat("HIGHSCORE");

Решение 2: Использование Static Instance

public class MyClass: MonoBehavior {
  public static MyClass Instance;
  public float highscore;
  void Awake() {
    Instance = this;
    DontDestroyOnLoad(this);
  }
}
...
public class YourClass: MonoBehavior {
  void YourFunction() {
    print(MyClass.Instance.highscore);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...