Unity繪製Mesh

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章