Компоненты и моноповедения в Unity | OTUS

Курсы

Программирование
Java Developer. Professional Highload Architect C++ Developer. Basic Специализация C++ Developer C++ Developer. Professional Java Developer. Basic Kotlin Developer. Basic Microservice Architecture JavaScript Developer. Basic Cloud Solution Architecture Team Lead C# Developer. Professional Алгоритмы и структуры данных Rust Developer C# Developer. Basic NoSQL Выбор профессии в IT
-99%
Python Developer. Basic Python Developer. Professional Базы данных iOS Developer. Professional React.js Developer Scala-разработчик Специализация iOS Unity Game Developer. Basic MS SQL Server Developer Kotlin Backend Developer Node.js Developer Symfony Framework PHP Developer. Basic Буткемп Java Groovy Developer
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Компоненты и моноповедения в Unity

Каждый игровой объект в Unity состоит из компонентов. Любой компонент четко реализует конкретный набор поведений, необходимых для того, чтобы выполнялся GameObject. Почему объект получается таким, каков он есть? Именно благодаря вкладу, который вносят компоненты, из которых этот объект состоит.

На картинках ниже — объект «Warrior». Он показан над окном «Инспектор» в интерфейсе игрового движка Unity. Обратите внимание на проиллюстрированные разделы (Animator, Rigidbody, Collider) – они, как раз таки, и являются компонентами, слагающими этот объект.

g9y2_vjbodzszyirdfjltqeltdk_2-1801-57c02e.png oghifmurmdhovpz_sjrb9cflkx0_1-1801-f6ecda.png

Представим, к примеру, что речь идет про автомобиль в игре:

— у единственного «видимого» элемента авто будет компонент Renderer, отрисовывающий машину и, скорее всего, компонент Collider, который задает для авто границы столкновений; — если авто представляет персонажа, то у самого объекта Car возможно наличие Player Input Controller (контроллера ввода от персонажа). Этот контроллер принимает все события, связанные с нажатиями клавиш, а также транслирует их в код, который, в свою очередь, отвечает за движение автомобиля в игре.

Нельзя не сказать, что есть возможность писать большие и сложные компоненты, в которых компонент один в один равен кодируемому объекту (к примеру, компонент player содержит код, который полностью описывает персонажа, а компонент enemy, в свою очередь, полностью кодирует противника). Как правило, принято извлекать логику и дробить ее на небольшие «обтекаемые» кусочки, которые будут соответствовать конкретным признакам. К примеру: • все объекты, которые обладают здоровьем, будь то Player или Enemy, могут иметь компонент LivingObject, который задает исходное значение здоровья, принимает урон и приводит в исполнение смерть, если объект умирает; • у игрока может быть компонент ввода, который контролирует сообщаемые ему движения, а у врага — аналогичный компонент, реализованный посредством искусственного интеллекта.

На протяжении своего жизненного цикла компоненты получают разные обратные вызовы, которые в среде Unity называются Сообщениями. В частности, к Сообщениям относятся: — OnEnable/OnDisable, — Start, — OnDestroy, — Update и прочие.

Если объект реализует метод Update(), то данный метод будет вызываться Unity в каждом кадре игрового цикла, и происходить это будет до тех пор, пока объект является активным, а заданный компонент действует. Эти методы можно пометить private — в таком случае игровой движок Unity все равно будет вызывать их.

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

Остается добавить, что в коде есть MonoBehavior — вездесущий родительский класс, предназначенный для представления компонентов. Большая часть невстроенных компонентов будут наследовать от MonoBehavior, а он уже, в свою очередь, будет наследовать от Behavior и Component, соответственно.

По материалам статьи «Basic Concepts in Unity for Software Engineers».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться