Визуализация болтов

Мотивация

Игровую механику, которую я решил воссоздать, я уже воссоздал, но не отобразил в 3D-среде, такой как Ratchet & Clank.

Проблема, которую вы пытаетесь решить

Собранные вами болты всегда будут помнить, независимо от того, на какую планету отправится Ratchet & Clank, и каждый раз, когда вы загружаете игру, поэтому данные должны быть постоянными в нескольких сценах, поскольку игровые объекты уничтожаются при переключении на новую сцену в Unity.

Ссылки и то, как другие люди решили проблему



Как вы решили эту проблему на основе вашего исследования

PlayerPrefs — это простой способ сохранения данных между сценами в Unity, но он ограничен целыми числами, числами с плавающей запятой и строками. Это не проблема для отображения общего количества собранных болтов, но если бы я расширил прототип, включив в него различные типы данных, я бы выбрал более продвинутое решение.

ScriptableObjects(SO) — это контейнер данных для хранения больших объемов данных и сокращения использования памяти проектом за счет предотвращения копирования значений.

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

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

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

Недостатком использования Singleton является зависимость от одного экземпляра при расширении и внесении изменений в проект. Возможно, вам придется вносить изменения в этот класс синглтона по мере развития и изменения игры, но вы рискуете сделать сценарии, зависящие от синглтона, несовместимыми.

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

Моя реализация

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

Каждому болту можно присвоить собственное значение, когда игрок находится в пределах досягаемости, болт будет двигаться к игроку и информировать UIManager об обновлении и отображении общего количества собранных болтов.

Дополнительный

Моно-синглтон/мастер-синглтон

Вот как я обычно пишу синглтоны

И это альтернативное решение, которое я взял из видео TaroDev.

Моя причина попробовать другой подход к обычному - повторное использование, потому что программирование, вероятно, более 50 одноэлементных скриптов за последние 3 года стало утомительным. Таким образом, наличие главного одноэлементного сценария экономит время.

При этом я еще не использовал его должным образом, поэтому мое мнение может измениться в будущем.