Создание и обращение к игровому объекту
Создадим новый игровой объект, например, куб. Пока не будем изменять его стандартные компоненты.
В скрипте 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.