Unity C#: Уроки по объектам, компонентам и скриптам

Работа с объектами и компонентами

Создадим переменную типа Light для взаимодействия с компонентом освещения в Unity. Назовём её myLight с модификатором доступа private. Она не будет отображаться в редакторе Unity.

Функция, присваивающая переменной myLight значение компонента Light объекта, к которому прикреплён скрипт, использует метод GetComponent<Light>.

GetComponent<Light> работает, только если компонент Light присутствует на объекте. Если скрипт прикреплён к Main Camera без компонента Light, метод вернёт null. Поэтому скрипт нужно прикрепить к объекту с компонентом Light (например, к Directional Light).

Условные операторы и работа с GameObject

В функции Update, вызываемой каждый кадр, используем условный оператор if с Input.GetKeyUp(KeyCode.Space) для отслеживания нажатия пробела. При нажатии, свойство enabled переменной myLight меняется на противоположное (включение/выключение света).

if (Input.GetKeyUp(KeyCode.Space)) {
    myLight.enabled = !myLight.enabled;
}

Создадим переменную object типа GameObject. Она будет отображаться в редакторе Unity, позволяя перетаскивать в неё объекты из иерархии сцены для управления через скрипт. object.SetActive(false) скрывает объект, а Destroy(object) удаляет его из сцены.

if (Input.GetKeyUp(KeyCode.a)) {
    object.SetActive(false);
}

if (Input.GetKeyUp(KeyCode.s)) {
    Destroy(object);
}

Изменение цвета объекта осуществляется через доступ к его компоненту Renderer и изменению свойства material.color.

if (Input.GetKeyUp(KeyCode.r)) {
    object.GetComponent<Renderer>().material.color = Color.red;
} else if (Input.GetKeyUp(KeyCode.g)) {
    object.GetComponent<Renderer>().material.color = Color.green;
} else if (Input.GetKeyUp(KeyCode.b)) {
    object.GetComponent<Renderer>().material.color = Color.blue;
}

Циклы и создание объектов

В C# доступны циклы for, while и do while. Пример с циклом for создаёт несколько объектов. Создание объектов внутри Update неэффективно; лучше делать это при инициализации или в другом подходящем месте.

private int numEnemies = 10;

for (int i = 0; i < numEnemies; i++) {
    Debug.Log("Create " + i + " enem");
}

Урок рассмотрел основные приёмы работы с объектами и компонентами в Unity, использование условных операторов и циклов для создания интерактивных элементов. Скрипты расширяют возможности Unity, позволяя создавать сложные проекты.

Что будем искать? Например,программа