Визуализация болтов
Мотивация
Игровую механику, которую я решил воссоздать, я уже воссоздал, но не отобразил в 3D-среде, такой как Ratchet & Clank.
Проблема, которую вы пытаетесь решить
Собранные вами болты всегда будут помнить, независимо от того, на какую планету отправится Ratchet & Clank, и каждый раз, когда вы загружаете игру, поэтому данные должны быть постоянными в нескольких сценах, поскольку игровые объекты уничтожаются при переключении на новую сцену в Unity.
Ссылки и то, как другие люди решили проблему
Как вы решили эту проблему на основе вашего исследования
PlayerPrefs — это простой способ сохранения данных между сценами в Unity, но он ограничен целыми числами, числами с плавающей запятой и строками. Это не проблема для отображения общего количества собранных болтов, но если бы я расширил прототип, включив в него различные типы данных, я бы выбрал более продвинутое решение.
ScriptableObjects(SO) — это контейнер данных для хранения больших объемов данных и сокращения использования памяти проектом за счет предотвращения копирования значений.
Еще одно преимущество заключается в том, что в игровом режиме вы можете изменить данные в SO, и он запомнит их после окончания игрового сеанса. Экономит время на необходимость вручную запоминать данные и изменять их после каждой игровой сессии.
Однако в развернутой сборке он не будет сохранять данные, поскольку вам потребуется система сохранения, выступающая в качестве посредника между SO и сценариями. Я обнаружил это воочию в своей игре Pongs, где я думал, что решил проблему сохранения с помощью SO, но когда я собирал сборку Windows, она всегда сбрасывалась на значение по умолчанию каждый раз, когда я загружала игру.
Singleton Pattern – это шаблон игрового дизайна, в котором один экземпляр сохраняется во всех сценах, что означает, что его данные глобально доступны для других сценариев и запоминаются во всех сценах до тех пор, пока они не будут уничтожены.
Недостатком использования Singleton является зависимость от одного экземпляра при расширении и внесении изменений в проект. Возможно, вам придется вносить изменения в этот класс синглтона по мере развития и изменения игры, но вы рискуете сделать сценарии, зависящие от синглтона, несовместимыми.
Следующая проблема заключается в том, что в каждой сцене должен быть один экземпляр класса singleton. Если в сцене более одного экземпляра, сценарии, которые полагаются на этот класс, будут сбиты с толку и могут неправильно считывать данные, что, в свою очередь, может вызвать проблемы в вашем проекте.
Моя реализация
Я решил использовать шаблон Singleton, несмотря на его недостатки, потому что я использовал шаблон раньше, и с помощью мер безопасности можно избежать некоторых его недостатков, и, наконец, потому что для обновления общего количества собранных болтов будет использоваться только несколько скриптов, я не беспокоился о том, что это сломает мой прототип.
Каждому болту можно присвоить собственное значение, когда игрок находится в пределах досягаемости, болт будет двигаться к игроку и информировать UIManager об обновлении и отображении общего количества собранных болтов.
Дополнительный
Моно-синглтон/мастер-синглтон
Вот как я обычно пишу синглтоны
И это альтернативное решение, которое я взял из видео TaroDev.
Моя причина попробовать другой подход к обычному - повторное использование, потому что программирование, вероятно, более 50 одноэлементных скриптов за последние 3 года стало утомительным. Таким образом, наличие главного одноэлементного сценария экономит время.
При этом я еще не использовал его должным образом, поэтому мое мнение может измениться в будущем.