1. Введение в C# и структура скриптов в Unity
Введение в C# и структура скриптов в Unity
Добро пожаловать в курс «C# для разработки игр в Unity». Это первая статья, и она станет фундаментом для всего вашего дальнейшего пути в создании игр. Мы не просто будем учить язык программирования; мы будем учиться «думать» на языке игрового движка.
Многие новички считают, что создание игр — это магия. На самом деле, это логика, упакованная в структуру. Unity предоставляет вам тело игры (графику, физику, звук), а C# — это её мозг. Без скриптов ваши персонажи будут просто статичными манекенами, а мир — безжизненной декорацией.
В этой статье мы разберем, как C# интегрирован в Unity, из чего состоит стандартный скрипт и как работает жизненный цикл игрового объекта.
Почему именно C#?
Unity использует C# (читается как «си-шарп») в качестве основного языка сценариев. Это объектно-ориентированный язык программирования, разработанный компанией Microsoft. Для нас, как для разработчиков игр, важны следующие его преимущества:
* Строгая типизация: Язык помогает избегать глупых ошибок, требуя четкого определения типов данных. * Управление памятью: C# берет на себя большую часть работы по очистке оперативной памяти (Garbage Collection), позволяя вам сосредоточиться на геймплее. * Огромное сообщество: Если вы столкнулись с проблемой, скорее всего, кто-то уже решил её и выложил решение в интернет.
Архитектура Unity: GameObject и Компоненты
Прежде чем писать код, нужно понять философию Unity. Вся сцена в Unity состоит из объектов, называемых GameObjects. Сам по себе GameObject — это просто пустой контейнер, точка в пространстве. Чтобы он стал камерой, светом, персонажем или стеной, к нему нужно добавить Компоненты.
Скрипт на C#, который вы пишете, — это тоже компонент. Когда вы создаете скрипт и «вешаете» его на объект, вы создаете новый тип поведения для этого объекта.
!Схема, показывающая, что GameObject является контейнером для различных компонентов, включая скрипты.
Создание первого скрипта
В интерфейсе Unity создание скрипта происходит через окно Project. Вы нажимаете правую кнопку мыши, выбираете Create -> C# Script и даете ему имя.
> Важное правило: Имя файла скрипта должно в точности совпадать с именем класса внутри этого файла. Если вы назвали файл PlayerController, то и класс внутри должен называться PlayerController. Если они отличаются, Unity не сможет подключить этот скрипт к объекту.
Давайте рассмотрим структуру стандартного скрипта, который Unity генерирует автоматически.
Разберем этот код построчно. Понимание каждой строки критически важно для дальнейшей работы.
1. Пространства имен (Namespaces)
В самом верху файла мы видим строки, начинающиеся с ключевого слова using:
Это подключение библиотек. Представьте, что вы столяр. Чтобы работать, вам нужен ящик с инструментами. using UnityEngine; говорит программе: «Открой ящик с инструментами Unity». Это дает нам доступ к таким классам, как GameObject, Transform, Debug и многим другим. Без этой строки компьютер не поймет команды, специфичные для движка.
2. Объявление класса
* public: Означает, что этот класс доступен для других частей программы (и для редактора Unity).
* class MyFirstScript: Мы объявляем чертеж (класс) с именем MyFirstScript.
* : MonoBehaviour: Это самая важная часть. Двоеточие означает наследование. Мы говорим, что наш скрипт — это не просто какой-то код, а наследник MonoBehaviour. Все скрипты, которые должны прикрепляться к объектам в Unity, обязаны наследоваться от MonoBehaviour. Именно это превращает обычный класс C# в компонент Unity.
3. Тело класса
Всё, что находится между фигурными скобками { и }, является телом класса. Здесь живут переменные (данные) и методы (действия).
Методы жизненного цикла: Start и Update
Unity работает по принципу игрового цикла (Game Loop). В отличие от обычных программ, которые выполняют задачу и закрываются, игра работает в бесконечном цикле, отрисовывая кадры десятки раз в секунду. MonoBehaviour предоставляет нам специальные методы, которые Unity вызывает автоматически в определенные моменты времени.
Метод Start()
Метод Start вызывается один раз в момент, когда объект с этим скриптом становится активным в сцене, но перед тем, как будет отрисован первый кадр.
Для чего используется: * Настройка начального количества жизней. * Получение ссылок на другие компоненты. * Установка начальной позиции.
Метод Update()
Метод Update вызывается каждый кадр. Если ваша игра работает с частотой 60 кадров в секунду (60 FPS), то код внутри Update выполнится 60 раз за одну секунду.
Для чего используется: * Считывание ввода игрока (нажатие клавиш). * Перемещение персонажа. * Таймеры и кулдауны.
> Важно понимать: время между вызовами Update не является константой. Оно зависит от того, насколько быстро компьютер может обработать текущий кадр. Это время называется DeltaTime.
Если мы хотим выразить зависимость частоты кадров математически, мы можем использовать простую формулу:
где — количество кадров в секунду (Frames Per Second), а — время, затраченное на обработку одного кадра (Delta Time). Чем меньше времени тратится на кадр, тем выше FPS.
Консоль и отладка
Как узнать, что ваш код работает, если визуально ничего не происходит? Для этого используется Консоль. В C# для Unity есть команда, которая позволяет выводить текстовые сообщения в окно Console редактора.
Давайте напишем наш первый рабочий код. Изменим стандартный шаблон следующим образом:
Если вы создадите такой скрипт, прикрепите его к любому объекту на сцене и нажмете кнопку Play, в консоли появится сообщение «Я родился! Этот код сработал один раз.».
Синтаксис: на что обратить внимание
C# — язык строгий к пунктуации. Новички часто совершают одни и те же ошибки:
Debug.Log("Test");
Ошибка*: Debug.Log("Test")
{ должен быть закрывающий }. Если вы потеряете скобку, скрипт не скомпилируется.Start, start и START — это три разных слова для компьютера. Методы Unity всегда пишутся с большой буквы (Start, Update), а ключевые слова языка — с маленькой (void, class, public).Заключение
Мы рассмотрели структуру базового скрипта в Unity. Теперь вы знаете, что скрипт — это компонент, наследуемый от MonoBehaviour, который имеет доступ к инструментам UnityEngine. Вы также узнали разницу между Start (инициализация) и Update (цикл) и научились выводить сообщения в консоль.
В следующих статьях мы начнем наполнять эти методы реальной логикой: научимся создавать переменные, управлять ими и заставим объекты двигаться.