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

Создание и обращение к игровому объекту

Создадим новый игровой объект, например, куб. Пока не будем изменять его стандартные компоненты.

В скрипте Basic создадим переменную, ссылающуюся на этот игровой объект. Это позволит выполнять различные манипуляции. Используем модификатор доступа (public или private с SerializeField), чтобы поле было видно в Unity и туда можно было назначить ссылку на объект.

public GameObject objG; // Переменная для ссылки на игровой объект

В Unity перетащите созданный куб в поле objG на основной камере. Теперь objG содержит ссылку на куб. Аналогично можно добавить ссылку на любой другой объект (Directional Light, Main Camera и т.д.).

Управление активностью объекта

В методе Start используем метод SetActive для управления активностью объекта:

void Start()
{
    objG.SetActive(false); // Скрывает объект при запуске игры
}

При запуске игры объект будет неактивен. Его можно активировать с помощью SetActive(true).

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

Обращаемся к компонентам объекта с помощью метода GetComponent:

void Start()
{
    Transform transformComponent = objG.GetComponent<Transform>();
    transformComponent.position = new Vector3(10, 0, 5); // Изменение позиции объекта
}

Этот код получает компонент Transform объекта objG и устанавливает его позицию. Аналогично работаем с другими компонентами (например, BoxCollider).

Создание полей для компонентов

Можно создать поле, напрямую ссылающееся на нужный компонент:

public Transform target; // Поле для компонента Transform

В Unity назначьте компонент Transform нужного объекта в это поле. Unity автоматически получит компонент. Этот подход удобнее, чем получать компонент через GetComponent каждый раз. Поле будет принимать только объекты с нужным компонентом.

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

Создадим массивы для работы с несколькими объектами или компонентами:

public GameObject[] objArray; // Массив игровых объектов

public Transform[] transforms; // Массив компонентов Transform

В Unity можно добавить объекты в массивы. Массивы используются в циклах для обработки нескольких объектов одновременно. Например, можно перебрать все элементы массива и скрыть все объекты:

void Start()
{
    for (int i = 0; i < objArray.Length; i++)
    {
        objArray[i].SetActive(false);
    }
}

Перемещение, вращение и удаление объектов

Для перемещения используйте метод Translate компонента Transform, а для вращения — метод Rotate. Удаление объектов осуществляется методом Destroy:

void Update()
{
    float speed = 5.0f;
    for (int i = 0; i < transforms.Length; i++)
    {
        transforms[i].Translate(new Vector3(-1, 0, 0) * speed * Time.deltaTime); // Перемещение по оси X
        transforms[i].Rotate(new Vector3(0, 10, 0) * Time.deltaTime); // Вращение по оси Y
        if (transforms[i] != null && transforms[i].position.x < -10f && transforms[i].gameObject.name == "Cube")
        {
            Destroy(transforms[i].gameObject);
        }
    }
}

Time.deltaTime обеспечивает плавное перемещение и вращение вне зависимости от частоты кадров. Проверка transforms[i] != null предотвращает ошибки при попытке доступа к удаленным объектам.

В этом уроке изучены основы работы с игровыми объектами и компонентами в Unity, включая создание ссылок на объекты, получение компонентов, управление активностью, перемещение, вращение и удаление объектов. Эти знания фундаментальны для создания игр в Unity.

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