Этот туториал охватывает основы программирования в Unity 3D на языке C#. Он служит мостом между базовыми знаниями C# и разработкой в Unity, предоставляя практические навыки.
Основы Unity и программирования
В Unity 3D объекты состоят из компонентов, определяющих их свойства. Программирование в Unity часто сводится к созданию и взаимодействию с этими компонентами. Компоненты пишутся на C#, хотя ранее использовался JavaScript, сейчас он практически не применяется.
Создание и редактирование скриптов
Создайте C# скрипт в проекте Unity, например, «Test». Для редактирования используется внешняя среда, такая как Visual Studio. Скрипт представляет собой простой класс, наследуемый от MonoBehaviour. Имя класса должно совпадать с именем файла скрипта. Переименование класса сделает компонент недоступным в Unity. Компонент добавляется к объекту перетаскиванием скрипта на него.
Основные методы MonoBehaviour
Основные методы для работы со скриптами в Unity:
- Start(): Вызывается при запуске игры или сцены.
- Update(): Вызывается при каждом обновлении кадра (обычно 60 раз в секунду).
Дополнительные методы описаны в документации Unity (Script Reference).
Вывод в консоль
Для вывода сообщений в консоль используется метод Debug.Log(). Пример:
Debug.Log("Hello, world! ");
Если вызов Debug.Log() находится в Update(), сообщение будет выводиться каждый кадр.
Взаимодействие с объектами и компонентами
Объявление переменных
Объявление публичных переменных (public) в классе позволяет Unity отобразить их в инспекторе для настройки. Например:
public GameObject myObject;
Отсутствие назначенного объекта приведёт к ошибке NullReferenceException.
Доступ к компонентам
Для доступа к стандартным компонентам объекта (например, Transform) используется следующий синтаксис:
transform.Translate(new Vector3(1, 0, 0) * Time.deltaTime);
Это перемещает объект на единицу по оси X за кадр. Time.deltaTime обеспечивает независимость от частоты кадров. Альтернативный способ — объявление переменной типа компонента и назначение её в инспекторе.
Компонент «Health»
Пример компонента Health, хранящего количество жизней объекта и имеющего метод Damage():
public class Health : MonoBehaviour
{
public float hitPoints;
public void Damage(float damage)
{
hitPoints -= damage;
if (hitPoints <= 0)
{
Destroy(gameObject);
}
}
}
Вызов метода компонента другого объекта осуществляется через GetComponent() или SendMessage():
// Через GetComponent()
Health health = otherObject.GetComponent<Health>();
if (health != null) health.Damage(10);
// Через SendMessage()
otherObject.SendMessage("Damage", 10);
Работа со вводом и триггерами
Ввод с клавиатуры
Обработка ввода с клавиатуры осуществляется с помощью класса Input:
if (Input.GetKey(KeyCode.E))
{
// Действие при зажатой клавише E
}
Ввод с мыши
Обработка ввода с мыши также осуществляется с помощью класса Input:
if (Input.GetMouseButtonDown(0))
{
// Действие при нажатии левой кнопки мыши
}
Триггеры
Триггеры используются для обнаружения столкновений без физического отталкивания. Для создания триггера установите флажок Is Trigger в компоненте Collider. События триггеров:
- OnTriggerEnter(): Вызывается при входе в триггер.
- OnTriggerExit(): Вызывается при выходе из триггера.
- OnTriggerStay(): Вызывается, пока объект находится в триггере.
Этот туториал представил базовые понятия программирования в Unity 3D на C#. Для более глубокого изучения рекомендуем обратиться к документации Unity (Script Reference).