Unity: Строим дома в 3D игре (Урок 5)

Этот урок описывает создание системы постройки домов в игре на Unity с использованием кнопок пользовательского интерфейса. Мы рассмотрим создание кнопок, загрузку 3D-моделей домов и реализацию функционала перемещения и размещения домов на игровом поле.

Создание кнопок пользовательского интерфейса

Добавьте на сцену объект Canvas. Вместе с ним автоматически добавится EventSystem, который пока не потребуется. В компоненте Canvas установите Render Mode в Screen Space — Camera и прикрепите основную камеру. Это закрепит Canvas за камерой. Установите значение Plane Distance в компоненте Canvas приблизительно в 1. Это приблизит Canvas к камере, обеспечивая видимость всех элементов.

Создайте две кнопки. Можно использовать кнопку с компонентом Text — Mesh Pro, но для простоты воспользуемся стандартной кнопкой и компонентом Text. Создайте две кнопки в редакторе Unity. Рекомендуется переключиться на вкладку Game для лучшего визуального контроля.

Расположите первую кнопку в нижнем левом углу, установив значения Anchor и сбросив значения Position X и Position Y до нуля. Сдвиньте кнопку, например, на X: 80, Y: 30. Уменьшите ширину кнопки до 80 пикселей. Переименуйте кнопку в «Ангар» и измените текст кнопки на «Ангар».

Продублируйте кнопку (Ctrl+D) и переименуйте её в «Дом». Измените текст на «Дом». Расположите кнопку «Дом» справа от кнопки «Ангар», изменив значение Position X (например, на 150).

Загрузка и использование 3D-моделей

Загрузите 3D-модели домов (например, из Unity Asset Store). После загрузки импортируйте модели в Unity. Добавьте один из скачанных префабов на сцену.

Скрипт перемещения дома (PlaceObject)

Создайте C# скрипт PlaceObject и добавьте его к префабу дома. Этот скрипт будет автоматически добавлен ко всем экземплярам префаба. Код скрипта:

using UnityEngine;

public class PlaceObject : MonoBehaviour
{
    public LayerMask layer;
    public float rotateSpeed = 60f;

    void Start()
    {
        PositionObject();
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            PositionObject();
        }
        if (Input.GetMouseButtonDown(1))
        {
            Destroy(gameObject);
        }
        if (Input.GetKey(KeyCode.LeftShift))
        {
            transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime);
        }
    }

    void PositionObject()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 1000f, layer))
        {
            transform.position = hit.point;
        }
    }
}

Создайте в Unity новый слой, например, «Ground». Назначьте этот слой объекту, представляющему поверхность игровой карты. В компоненте PlaceObject префаба дома выберите слой «Ground» в поле layer.

Скрипт построения домов (ButtonPlaceBuild)

Создайте C# скрипт ButtonPlaceBuild:

using UnityEngine;

public class ButtonPlaceBuild : MonoBehaviour
{
    public GameObject building;

    public void PlaceBuild()
    {
        Instantiate(building, Vector3.zero, Quaternion.identity);
    }
}

Добавьте этот скрипт к обеим кнопкам («Ангар» и «Дом»). Для каждой кнопки назначьте соответствующий префаб дома в поле building. В событиях кнопок вызовите метод PlaceBuild скрипта ButtonPlaceBuild.

В этом уроке мы создали функциональную систему постройки домов в Unity, используя кнопки пользовательского интерфейса, загрузку 3D-моделей и скрипты для перемещения и размещения объектов. Система позволяет вращать дома, удерживая левую клавишу Shift.

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