Unity делает так, что все сценарии (в вашем случае игровой код, специфичный для типа игрового объекта) происходят из базового класса MonoBehaviour
, который сам по себе является производным от класса, более подходящего для вашего случая Component
. Вы никогда не редактируете (и не имеете доступа к коду) класс GameObject.
Игровой объект отвечает за содержание всех этих Component
s. Это также якобы отвечает за вызов соответствующих функций на них (то есть Update
). Unity использует отражение, чтобы определить, какие функции вызывать (смотрите раздел «Перезаписываемые функции» на этой странице ), но вы, вероятно, захотите сделать их виртуальными.
Таким образом, один из механизмов, которые вы используете в Unity, - это получение компонентов вашего текущего игрового объекта (или его дочерних элементов) по типу. Есть некоторые вспомогательные свойства, которые обертывают некоторые общие вещи. Например, если вы хотите получить доступ к Transform
компоненту игрового объекта (для управления позицией / вращением / масштабом игрового объекта), вам, как правило, придется сделать что-то подобное this.GetComponent<Transform>().position
, но они обернут это в this.transform.position
вызов помощника . Другой распространенный шаблон - доступ к Renderer
компоненту текущего игрового объекта . Поэтому, если вы хотите что-то сделать, например, изменить материал текущего игрового объекта, из другого скрипта вы можете сделать что-то подобное this.renderer.material = someOtherMaterial
, и ваш игровой объект обновится соответствующим образом.
Один из способов, которым это работает в Unity, заключается в том, что их редактор настроен так, что вы можете создавать игровые объекты на вашей сцене, у которых уже есть подключенные компоненты. В случае Unity все игровые объекты имеют Transform
компонент, но он также может содержать встроенные типы, такие как AudioListener
или Renderer
, которые делают то, что вы ожидаете. Или вы можете добавить свои собственные компоненты, которые делают то, что вы хотите, чтобы они делали. Редактор также предоставляет открытые / сериализуемые поля для ваших компонентов, поэтому вам не нужно создавать разные сценарии, если вы хотите использовать один и тот же базовый код, но изменить несколько магических чисел вокруг.
В общем, это довольно изящно, и я бы посоветовал скачать бесплатную версию Unity и поэкспериментировать с тем, как их система сценариев настроена как довольно приличное доказательство того, чего вы хотите достичь.