Деякий час тому я почав працювати з Unity, і я все ще борюся з питанням щільно з'єднаних сценаріїв. Як я можу структурувати свій код, щоб уникнути цієї проблеми?
Наприклад:
Я хочу мати системи здоров'я та смерті в окремих сценаріях. Я також хочу мати різні взаємозамінні сценарії ходьби, які дозволяють мені змінити спосіб переміщення персонажа гравця (засновані на фізиці, інерційні елементи керування, як у Маріо, порівняно з жорсткими, зворушливими елементами управління, як у Super Meat Boy). Сценарій Health повинен містити посилання на сценарій Death, щоб він міг запускати метод Die (), коли здоров'я гравців досягає 0. Сценарій Death повинен містити деяку посилання на використовуваний сценарій, щоб відключити ходьбу на смерть (I я втомився від зомбі).
Я зазвичай створювати інтерфейси, як IWalking
, IHealth
і IDeath
, таким чином , що я можу змінити на натхненням ці елементи , не порушуючи решту мого коду. Скажімо, я б їх створив окремим сценарієм на об’єкті програвача PlayerScriptDependancyInjector
. Можливо , що сценарій буде мати громадські IWalking
, IHealth
і IDeath
атрибути, так що залежно може бути встановлений конструктором рівня від інспектора, перетягуючи відповідні сценарії.
Це дозволило б мені легко додавати поведінку до ігрових об'єктів і не турбуватися про важко кодовані залежності.
Проблема в Єдності
Проблема в тому , що в Unity я не можу виставити інтерфейси в інспектора, і якщо я пишу свої власні інспектори, посилання не отримаєте серіалізовать, і це дуже багато непотрібної роботи. Тому мені залишається писати щільно зв'язаний код. Мій Death
сценарій розкриває посилання на InertiveWalking
сценарій. Але якщо я вирішу, що хочу, щоб персонаж гравця жорстко контролював, я не можу просто перетягнути TightWalking
сценарій, мені потрібно змінити Death
сценарій. Це смокче. Я можу з цим впоратися, але моя душа плаче кожен раз, коли я роблю щось подібне.
Яка краща альтернатива інтерфейсам в Unity? Як виправити цю проблему? Я це знайшов , але він говорить мені те, що я вже знаю, і не говорить мені, як це зробити в Єдності! Це теж обговорює, що слід робити, а не як, це не стосується питання тісної зв'язку між сценаріями.
Взагалі я відчуваю, що вони написані для людей, які приїхали в Unity з ігровим дизайном, який просто навчився кодувати, і в Unity дуже мало ресурсів для звичайних розробників. Чи є якийсь стандартний спосіб структурувати свій код в Unity, або я повинен з'ясувати свій власний метод?
The problem is that in Unity I can't expose interfaces in the inspector
Я не думаю, що я розумію, що ви маєте на увазі під "викрити інтерфейс у інспектора", тому що моя перша думка була "чому б і ні?"