Любой C# скрипт в Unity состоит из нескольких основных компонентов. Рассмотрим их на примере.
Пространства имен
В начале скрипта обычно указываются пространства имен (namespaces), которые можно рассматривать как модули или библиотеки. Они расширяют возможности скрипта, добавляя новый функционал, классы и функции. Например, System.Collections и System.Collections.Generic предоставляют доступ к классам для работы с коллекциями (динамическими массивами). Эти подключения можно удалить, если коллекции не используются.
Подключение UnityEngine обязательно. В этом пространстве имен находятся основные стандартные классы Unity, включая MonoBehaviour – базовый класс для всех C# скриптов Unity. Все методы, такие как Start и Update, а также возможности взаимодействия с объектами Unity, определены в UnityEngine.
Класс и наследование от MonoBehaviour
Далее следует класс. Название класса должно совпадать с именем файла скрипта. Класс обычно наследует от MonoBehaviour. Это обеспечивает доступ к методам Start, Update и множеству других методов.
Метод Start выполняется при запуске игры. Всё, что находится внутри этого метода, будет выполнено один раз в начале игры. Метод Update (убранный из примера для следующего урока) выполняется каждый кадр.
Вывод информации в консоль
Для вывода информации в консоль Unity используется класс Debug из пространства имен UnityEngine. Метод Debug.Log() выводит сообщение в консоль. Например, Debug.Log("Hello world!"); выведет строку «Hello world!» в консоль Unity.
Важно: C# скрипты не выполняются автоматически. Для выполнения скрипта его необходимо поместить на игровой объект (GameObject) в сцене Unity. Если объект неактивен, скрипт на нём также не будет выполняться.
Базовые концепции C#
В скриптах Unity используется стандартный язык C#, поэтому все его конструкции (переменные, циклы, условия и т.д.) доступны.
Переменные
Для создания переменной указывается тип данных и имя. Модификаторы доступа (public, private, protected) определяют видимость переменной:
- public – переменная видна внутри класса и в Unity.
- private – переменная видна только внутри класса.
- protected – переменная видна внутри класса и в классах-наследниках.
Переменные, объявленные как public, доступны для редактирования в Unity, позволяя менять их значения во время редактирования сцены или во время выполнения игры. Однако изменения, внесенные во время выполнения, не сохраняются после остановки игры.
Атрибут [SerializeField] делает приватную переменную доступной для редактирования в Unity, не делая её публичной:
[SerializeField] private int myInt = 5;
Массивы и коллекции
Для создания массива указывается тип данных, имя и размерность:
public int[] myIntArray = new int[3];
Размер массива определяется при создании и не может быть изменен во время выполнения.
Динамические массивы (например, List<T>) позволяют изменять размер во время выполнения. Для их использования необходимо подключить пространства имен System.Collections и System.Collections.Generic.
using System.Collections.Generic;
public List<string> myStringList = new List<string>();
Условные операторы и циклы
В скриптах Unity можно использовать все стандартные условные операторы и циклы C# (if, else, switch, for, while, foreach). Их использование аналогично стандартному C#.
Методы
Можно создавать собственные методы, используя стандартный синтаксис C#.
В этом уроке были рассмотрены базовые концепции работы с C# скриптами в Unity: подключение пространств имен, создание классов, наследование от MonoBehaviour, вывод информации в консоль, работа с переменными, массивами и коллекциями, условными операторами и циклами. Более глубокое изучение этих и других концепций будет продолжено в последующих уроках.