Unity 6.3
0 онлайн 76 гостей 3 в системе
Вход

MeshGenerationContext

класс в UnityEngine.UIElements

Выполнено в:UnityEngine.UIElementsModule

Описание

Предоставляет методы для генерации визуального содержимого визуального элемента во время обратного вызова VisualElement.generateVisualContent.


Визуальный контент генерируется с помощью Painter2D объекта, или вручную путем выделения сетки с помощью MeshGenerationContext.Allocate методом, а затем заполнить вершины и индексы.

Чтобы использовать объект художника, доступ к MeshGenerationContext.painter2D свойство, а затем использовать его для выдачи команд рисования. Вы можете найти пример в Painter2D документация.

Если вы вручную предоставляете содержимое MeshGenerationContext.Allocate а также обеспечить текстуру во время распределения, вы можете использовать Vertex.uv значения вершин, чтобы сопоставить её с получившимся мешем. UI Toolkit может хранить текстуру во внутреннем атласе.

//This example creates a custom element that dynamically renders a textured rectangle 
//based on the element’s size. 

using UnityEngine; using UnityEngine.UIElements;

public class TexturedElement : VisualElement { static readonly Vertex[] k_Vertices = new Vertex[4]; static readonly ushort[] k_Indices = { 0, 1, 2, 2, 3, 0 };

static TexturedElement() { k_Vertices[0].tint = Color.white; k_Vertices[1].tint = Color.white; k_Vertices[2].tint = Color.white; k_Vertices[3].tint = Color.white;

k_Vertices[0].uv = new Vector2(0, 0); k_Vertices[1].uv = new Vector2(0, 1); k_Vertices[2].uv = new Vector2(1, 1); k_Vertices[3].uv = new Vector2(1, 0); }

Texture2D m_Texture;

public TexturedElement() { //This element grows to fill the available space. style.flexGrow = 1.0f; //Subscribes the OnGenerateVisualContent method to the generateVisualContent delegate. generateVisualContent += OnGenerateVisualContent;

//Create a simple 2x2 checkerboard texture. m_Texture = new Texture2D(2, 2); m_Texture.SetPixels(new Color[] { Color.white, Color.black, Color.black, Color.white }); m_Texture.Apply();

//You can also load a texture from a file. //m_Texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/tex.png"); }

//This method is called when the element needs to render its content. void OnGenerateVisualContent(MeshGenerationContext mgc) { Rect r = contentRect; if (r.width < 0.01f || r.height < 0.01f) return; // Skip rendering when too small.

float left = 0; float right = r.width; float top = 0; float bottom = r.height;

k_Vertices[0].position = new Vector3(left, bottom, Vertex.nearZ); k_Vertices[1].position = new Vector3(left, top, Vertex.nearZ); k_Vertices[2].position = new Vector3(right, top, Vertex.nearZ); k_Vertices[3].position = new Vector3(right, bottom, Vertex.nearZ);

MeshWriteData mwd = mgc.Allocate(k_Vertices.Length, k_Indices.Length, m_Texture);

mwd.SetAllVertices(k_Vertices); mwd.SetAllIndices(k_Indices); } }

Свойства

Свойство Описание
painter2DОбъект художника, используемый для выдачи команд рисования 2D. Используйте этот объект для рисования векторных фигур, таких как линии, дуги и кривы Безье.
visualElementЭлемент, для которого был вызван VisualElement.generateVisualContent.

Открытые методы

Метод Описание
AddMeshGenerationJobИнструктирует рендер дождаться завершения предоставленного JobHandle перед началом обработки мешей.
AllocateВыделяет и рисует указанное количество вершин и индексов, необходимых для выражения геометрии для рисования содержания VisualElement.
AllocateTempMeshВыделяет указанное количество вершин и индексов из временного распределителя.
DrawMeshЗаписывает команду отрисовки с переданным индексированным мешем из списка треугольников.
DrawTextНарисовать строку текста.
DrawVectorImageЧертает объект VectorImage.
GetTempMeshAllocatorВозвращает распределитель, который может быть использован для безопасного выделения временных мешей из системы заданий. Меши имеют ту же область действия, что и меши, выделенные AllocateTempMesh.
InsertMeshGenerationNodeВставляет узел в дерево отображения, который может быть заполнен из системы заданий.