Не храните переменные в скриптах, которым они не принадлежат. Есть несколько решений этой проблемы:
- Вариант - создать
ScriptableObject
, содержащий переменные, которые необходимо передать. Он создается вами в редакторе, а затем назначается в качестве актива префабу вашего плеера. Вместо того, чтобы устанавливать переменную в самом проигрывателе, он просто устанавливает переменную в этом хранилище.
Это хранилище может быть любым, от одной переменной ( см. Это видео для справки ) до больших систем, таких как Unitys Система тайловых карт . - Вы создаете компонент, который прикрепляется к игровому объекту, находящемуся в сцене «Не уничтожать при загрузке». Это можно сделать, создав сценарий моноповедения и вызвав
DontDestroyOnLoad(gameObject)
в его методе Start
. Кроме того, вы можете сделать его синглтоном и получать к нему доступ отовсюду. Для справки см. этот ответ из stackexchange разработчиков игры.
Честно говоря, я всегда стараюсь go с первым. Если вы хотите, чтобы некоторые переменные сохранялись в «игровом состоянии» (так оно называется в Unreal), вы создаете их извне и ссылаетесь на них в течение всего сеанса. На самом деле существует множество ситуационных подходов, и нет правильного или неправильного, но вы всегда должны помнить, что класс должен служить только одной цели и сценарий игрока, который перемещает игрока и сохраняет текущую статистику (которая должна жить длиннее самого плеера) обычно плохой подход.