Этот урок описывает создание системы постройки домов в игре на 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.