Некоторое время назад я начал работать с Unity и до сих пор борюсь с проблемой тесно связанных скриптов. Как я могу структурировать свой код, чтобы избежать этой проблемы?
Например:
Я хочу иметь системы здоровья и смерти в отдельных сценариях. Я также хочу иметь различные взаимозаменяемые сценарии ходьбы, которые позволяют мне изменять способ перемещения персонажа игрока (основанные на физике, инерционные элементы управления, как в Mario, по сравнению с жесткими, дергающимися элементами управления, как в Super Meat Boy). Сценарий Health должен содержать ссылку на скрипт Death, чтобы он мог вызывать метод Die (), когда здоровье игроков достигает 0. В скрипте Death должна содержаться некоторая ссылка на используемый скрипт прогулки, чтобы отключить хождение на смерть (I устал от зомби).
Я обычно создавать интерфейсы, как IWalking
, IHealth
и IDeath
, таким образом , что я могу изменить на наитию эти элементы , не нарушая остальную часть моего кода. Скажем, я бы настроил их с помощью отдельного сценария на объекте player PlayerScriptDependancyInjector
. Возможно , что сценарий будет иметь общественные IWalking
, IHealth
и IDeath
атрибуты, так что зависимости может быть установлен конструктором уровня от инспектора, перетаскивая соответствующие сценарии.
Это позволило бы мне просто добавить поведение в игровые объекты и не беспокоиться о жестко закодированных зависимостях.
Проблема в единстве
Проблема в том , что в Unity я не могу выставить интерфейсы в инспекторе, и если я пишу свои собственные инспекторы, ссылки не получите сериализовать, и это очень много ненужной работы. Вот почему я остался с написанием тесно связанного кода. Мой Death
сценарий предоставляет ссылку на InertiveWalking
сценарий. Но если я решу, что хочу, чтобы персонаж игрока жестко контролировал, я не могу просто перетащить TightWalking
сценарий, мне нужно изменить Death
сценарий. Это отстой. Я могу с этим справиться, но моя душа плачет каждый раз, когда я делаю что-то подобное.
Какая предпочтительная альтернатива интерфейсам в Unity? Как мне решить эту проблему? Я нашел это , но оно говорит мне то, что я уже знаю, и не говорит мне, как это сделать в Unity! Здесь также обсуждается, что нужно делать, а не как, это не решает проблему тесной связи между сценариями.
В целом, я чувствую, что они написаны для людей, которые пришли в Unity с опытом разработки игр, которые просто учатся программировать, и у Unity очень мало ресурсов для обычных разработчиков. Есть ли какой-нибудь стандартный способ структурировать ваш код в Unity, или мне нужно найти свой собственный метод?
The problem is that in Unity I can't expose interfaces in the inspector
Я не думаю, что понимаю, что вы подразумеваете под «разоблачить интерфейс в инспекторе», потому что моей первой мыслью было «почему бы и нет?»