Как я могу получить доступ к классу, который унаследован от monobehaviour
Моя проблема немного сложнее, чем заголовок: у меня есть класс GUIController, который управляет GUI, и я хочу создать игровое меню в игре. В этом меню я могу выбрать оружие и купить его, если у меня будет достаточно денег. Я должен получить доступ к их данным, таким как цена, описание или имя.
Проблемы:
-Для доступа к их данным я должен создать экземпляр объекта из класса (функция запуска должна быть запущена до доступа к данным).
-Основной класс оружия унаследован от MonoBehaviour, поэтому я не могу создать экземпляр объекта из класса.
Возможное решение:
-Я мог бы создать экземпляр игрового объекта, который содержит класс в качестве компонента скрипта, а затем я мог получить доступ к его данным. Я думаю, что это не очень хорошее решение.
Вопрос:
Должен ли я хранить информацию где-то еще? В местной БД или что-то? Я думал, что хранить информацию внутри класса - хорошая идея, но я не уверен в этом больше.
Спасибо за ваши ответы заранее!
1 ответ
РЕДАКТИРОВАТЬ: Учитывая вашу иерархию классов, предложение статической переменной явно не будет работать. Отредактировано, чтобы дать другое возможное решение.
Вы можете создать новый класс для Weapon
свойства и сделать его экземпляры для каждого типа оружия. Они могут быть заполнены из кода, базы данных, файлов конфигурации и т. Д. При создании экземпляра определенного Weapon
Вы могли бы дать ему объект свойств и скопировать значения всех свойств. Это можно сделать с помощью отражения, чтобы избавить вас от необходимости писать присваивания для каждого свойства.
Объекты свойств оружия могут быть сделаны и доступны разными способами. Одним из предложений было бы иметь хранилище, которое можно было бы использовать для получения ссылки на объект (если они являются синглетонами) или для возврата нового.
Между прочим, это довольно широкий вопрос, и "правильный" ответ может зависеть от того, сколько у вас данных и как вы собираетесь их использовать, или может быть вопросом наилучшей практики. Как таковой он, возможно, лучше подходит для https://softwareengineering.stackexchange.com/ или https://gamedev.stackexchange.com/.