1. Скрипт как компонент: Связь текстового файла и GameObject
Скрипт как компонент: Связь текстового файла и GameObject
В предыдущем курсе мы собрали сцену: расставили платформы и поместили на них красный квадрат, который будет нашим игроком. Но если сейчас нажать кнопку Play, ничего не произойдет. Квадрат просто висит в воздухе. В нем нет жизни, нет гравитации и нет реакции на нажатия клавиш. Чтобы превратить статичную картинку в игру, объектам нужно дать «мозг». В Unity эту роль выполняют скрипты.
Компонентный подход: от формы к логике
Мы уже знаем, что любой объект на сцене — это пустой контейнер GameObject. Его свойства полностью зависят от того, какие компоненты лежат внутри.
Добавили Transform — объект получил координаты. Добавили Sprite Renderer — объект стал видимым красным квадратом.
Программирование в Unity строится на точно таком же принципе. Скрипт — это просто еще один компонент. Разница лишь в том, что Transform написали разработчики Unity, а скрипт для управления вашим персонажем напишете вы сами. Когда вы пишете код, вы фактически создаете новый, уникальный строительный блок (кастомный компонент), который затем можно положить в любой GameObject.
Создание скрипта: текстовый файл в проекте
Все скрипты хранятся в окне Project, точно так же, как картинки, звуки или префабы. Это обычные текстовые файлы с расширением .cs (C Sharp).
Чтобы создать скрипт:
Здесь наступает самый критичный момент для новичков, на котором ломаются первые проекты. Как только файл появился, его имя выделено синим цветом — Unity ждет, что вы введете название.
Назовем его PlayerController и нажмем Enter.
Почему это так важно сделать сразу? Когда вы создаете скрипт, Unity автоматически генерирует внутри него стартовый шаблон кода. В этом коде есть имя так называемого класса (шаблона поведения). Имя файла должно символ в символ совпадать с именем класса внутри него.
Если вы создали скрипт, случайно кликнули мышкой мимо, он назвался NewBehaviourScript. Если вы потом переименуете файл в PlayerController, внутри текстового документа имя останется старым. Unity запутается и выдаст ошибку, отказавшись работать с этим файлом.
!Что произойдет при нарушении правила имен
Правило хорошего тона: названия скриптов всегда пишутся слитно, каждое новое слово начинается с заглавной буквы (стиль PascalCase). Например: EnemyHealth, GameManager, WeaponShoot. Никаких пробелов.
Связываем код и объект
Сам по себе файл PlayerController.cs, лежащий в окне Project, ничего не делает. Это просто чертеж. Чтобы чертеж заработал, его нужно применить к конкретному объекту на сцене.
Сделать это можно двумя способами:
PlayerController и выбрать наш скрипт из списка.Как только вы это сделаете, в окне Inspector под компонентами Transform и Sprite Renderer появится новый блок — ваш скрипт.
!Анатомия Инспектора со скриптом
Теперь текстовый файл и игровой объект неразрывно связаны. GameObject знает, что при запуске игры он должен заглянуть в файл PlayerController.cs и начать выполнять написанные там инструкции.
Один и тот же скрипт можно повесить на десять разных объектов. Например, написав скрипт EnemyPatrol (Патрулирование врага) один раз, вы можете добавить его на всех гоблинов на уровне. Каждый гоблин получит свой собственный экземпляр этого компонента и будет патрулировать свою зону независимо от других.
Мы создали файл, дали ему правильное имя и прикрепили к персонажу. Теперь наш красный квадрат готов получать команды. В следующей главе мы откроем этот текстовый файл и разберем анатомию того самого стартового кода, который Unity сгенерировала для нас автоматически.