Unity中代碼繪製Mesh
Fraphic
Unity所有可視UI組建的基類。
如果你想要在Unity創建一個UI組建,都會自動繼承該類。
例子:
using UnityEngine;
using UnityEngine.UI;
[ExecuteInEditMode]
public class graphic : Graphic
{
protected override void OnPopulateMesh(VertexHelper vh)
{
Vector2 corner1 = Vector2.zero;
Vector2 corner2 = Vector2.zero;
corner1.x = 0f;
corner1.y = 0f;
corner2.x = 1f;
corner2.y = 1f;
corner1.x -= rectTransform.pivot.x;
corner1.y -= rectTransform.pivot.y;
corner2.x -= rectTransform.pivot.x;
corner2.y -= rectTransform.pivot.y;
corner1.x *= rectTransform.rect.width;
corner1.y *= rectTransform.rect.height;
corner2.x *= rectTransform.rect.width;
corner2.y *= rectTransform.rect.height;
vh.Clear();
UIVertex vert = UIVertex.simpleVert;
vert.position = new Vector2(corner1.x, corner1.y);
vert.color = color;
vh.AddVert(vert);
vert.position = new Vector2(corner1.x, corner2.y);
vert.color = color;
vh.AddVert(vert);
vert.position = new Vector2(corner2.x, corner2.y);
vert.color = color;
vh.AddVert(vert);
vert.position = new Vector2(corner2.x, corner1.y);
vert.color = color;
vh.AddVert(vert);
vh.AddTriangle(0, 1, 2);
vh.AddTriangle(2, 3, 0);
}
}
在這裏我們需要解釋的如下:
[ExecuteInEditMode]
普通的類,加上ExecuteInEditMode, 就可以在編輯器模式中運行。
OnPopulateMesh
Callback function when a UI element needs to generate vertices.
VertexHelper
一個幫助用戶爲UI創建mesh的有用的類。
該類執行完畢之後會自動釋放內存空間。
using UnityEngine;
using UnityEngine.UI;
public class ExampleClass : MonoBehaviour
{
Mesh m;
void Start()
{
Color32 color32 = Color.red;
using (var vh = new VertexHelper())
{
vh.AddVert(new Vector3(0, 0), color32, new Vector2(0f, 0f));
vh.AddVert(new Vector3(0, 100), color32, new Vector2(0f, 1f));
vh.AddVert(new Vector3(100, 100), color32, new Vector2(1f, 1f));
vh.AddVert(new Vector3(100, 0), color32, new Vector2(1f, 0f));
vh.AddTriangle(0, 1, 2);
vh.AddTriangle(2, 3, 0);
vh.FillMesh(m);
}
}
}
UIVertex.simpleVert
在UI系統中使用的簡單的UIVertex與合理的設置。
總結:
Unity官方文檔中講的還是比較詳盡的,對這方面有需要的童鞋可以找個時間去看一下,應該會有不小的收穫。這裏給大家留一個入口:Unity - Scripting API Graphic