Для представления плоских поверхностей Unity включает в себя Plane и Quadпримитивный объект, который напоминает плоскость, но его края только одиночные. единица длины, он использует только 4 вершины, а поверхность ориентирована в плоскости XY локального координатного пространства. Подробнее
См. в Словарь примитивные игровые объекты, которые вы можете создавать в своих сценахСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь. Однако полезно понимать, как использовать скрипт для построения четырехугольника сеткиосновного графического примитива Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. Словарь. Это важно для процедурной генерации сетки.
Примечание. Unity обрабатывает и отображает геометрию в виде треугольников, а не четырехугольников. Это означает, что примитив Quad состоит из двух треугольников.
Массив вершин
Первое, что вам нужно сделать, это настроить массив вершин, которые использует ваша фигура.
В этом примере предполагается, что четырехугольник лежит на осях X и Y, а ваш скрипт содержит переменные width и height.
Vector3[] vertices = new Vector3[4]
{
new Vector3(0, 0, 0),
new Vector3(width, 0, 0),
new Vector3(0, height, 0),
new Vector3(width, height, 0)
};
mesh.vertices = vertices;
В этом примере вершины представлены в следующем порядке:
Внизу слева
Внизу справа
Верхний левый
Вверху справа
Благодаря способу, которым Unity извлекает свойства данных Mesh, гораздо эффективнее настроить данные в собственном массиве, а затем назначить массив свойству (например, Mesh. вершины
или Mesh.normals
), а не обращаться к массиву свойств через отдельные элементы.
Треугольники
Далее нужно настроить треугольники. Четырехугольник состоит из двух треугольников, каждый из которых состоит из трех точек в массиве вершин, который вы создали ранее. Чтобы указать точки, вы определяете каждый треугольник как три индекса массива вершин. Например, нижний левый треугольник для этого четырехугольника использует индексы 0, 2 и 1, которые соответствуют координатам (0, 0, 0), (0, высота, 0) и (ширина, 0, 0) из массива вершин. . Порядок важен, потому что вы должны расположить углы по часовой стрелке. Верхний правый треугольник использует индексы 2, 3 и 1.
int[] tris = new int[6]
{
// lower left triangle
0, 2, 1,
// upper right triangle
2, 3, 1
};
mesh.triangles = tris;
Нормалы
Сетка с вершинами и треугольниками видна в сцене, но Unity неправильно ее затеняет, поскольку у нее еще нет нормалей. Нормали для этого примера просты, потому что все они идентичны. Каждая нормаль указывает в отрицательном направлении оси Z в локальном пространстве четырехугольника. Когда вы добавляете нормали, Unity правильно затеняет квадрат, но вам нужен свет в сцене, чтобы увидеть эффект.
Vector3[] normals = new Vector3[4]
{
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward
};
mesh.normals = normals;
Если вы не хотите определять нормали самостоятельно, вы можете использовать Mesh.RecalculateNormals().
Координаты текстуры
Наконец, чтобы правильно отображать текстуры на материале меша, добавьте координаты текстуры в меш. Координаты текстуры находятся в диапазоне от 0 до 1. Каждая вершина в сетке имеет координату текстуры, которая указывает, где на текстуре материала взять образец. Чтобы отобразить всю Текстуру в четырехугольнике, значения координат текстуры в каждой вершине должны быть равны 0 или 1, чтобы каждый угол четырехугольника соответствовал углу Текстуры.
Vector2[] uv = new Vector2[4]
{
new Vector2(0, 0),
new Vector2(1, 0),
new Vector2(0, 1),
new Vector2(1, 1)
};
mesh.uv = uv;
Окончательный сценарий
Следующий скрипт объединяет все вышеперечисленное для создания четырехугольника в вашей сцене. Чтобы использовать его:
Создайте новый сценарий C# (меню: Assets > Create > C# Script) и назовите его QuadCreator.
Откройте скрипт QuadCreator, скопируйте в него код примера и сохраните скрипт.
Вернувшись в редактор, создайте новый игровой объект в своей сцене (меню: GameObject > Create Empty).
В Инспекторе выберите Добавить компонент > Сценарии > Quad Creator.
Разместите GameObjectосновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Смотрите в Словарь в любом месте сцены.
Войдите в игровой режим. Если вы не видите четырехугольник в представлении «Сцена» или «Игра», убедитесь, что вы просматриваете его с правильной стороны; Unity не отображает обратную сторону этой сетки.
using UnityEngine;
public class QuadCreator : MonoBehaviour
{
public float width = 1;
public float height = 1;
public void Start()
{
MeshRenderer meshRenderer = gameObject.AddComponent();
meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));
MeshFilter meshFilter = gameObject.AddComponent();
Mesh mesh = new Mesh();
Vector3[] vertices = new Vector3[4]
{
new Vector3(0, 0, 0),
new Vector3(width, 0, 0),
new Vector3(0, height, 0),
new Vector3(width, height, 0)
};
mesh.vertices = vertices;
int[] tris = new int[6]
{
// lower left triangle
0, 2, 1,
// upper right triangle
2, 3, 1
};
mesh.triangles = tris;
Vector3[] normals = new Vector3[4]
{
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward
};
mesh.normals = normals;
Vector2[] uv = new Vector2[4]
{
new Vector2(0, 0),
new Vector2(1, 0),
new Vector2(0, 1),
new Vector2(1, 1)
};
mesh.uv = uv;
meshFilter.mesh = mesh;
}
}
Примечание. Этот пример кода находится в функции Start, что означает, что он выполняется один раз, когда вы входите в режим воспроизведения, и сетка не меняется во всем приложении. Однако вы можете добавить код в функцию обновления, чтобы сетка менялась в каждом кадре. Имейте в виду, что это значительно увеличивает ресурсоемкость генерации Mesh.