UnityEngine.UI.VertexHelper

作者:追风剑情 发布于:2019-5-27 17:31 分类:Unity3d

示例:自定义UI几何图形

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class VertexHelperTest : MonoBehaviour {

    public MeshFilter meshFilter;
    public MeshRenderer meshRenderer;
    public Mesh mesh;
    public Material mat;
    public bool emptySquare = false;

    private void Awake()
    {
        if (meshFilter == null)
            meshFilter = GetComponent<MeshFilter>();
        if (meshRenderer == null)
            meshRenderer = GetComponent<MeshRenderer>();
        mesh = new Mesh();
        meshFilter.mesh = mesh;
        meshRenderer.material = mat;
    }

    void Start ()
    {
        if (emptySquare)
            GenEmptySquareMesh();
        else
            GenSquareMesh();
    }

    void GenSquareMesh()
    {
        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(mesh);
        }
    }

    void GenEmptySquareMesh()
    {
        Color32 color32 = Color.green;
        using (var vh = new VertexHelper())
        {
            vh.AddVert(new Vector3(0, 0), color32, new Vector2(0f, 0f));//0
            vh.AddVert(new Vector3(0, 50), color32, new Vector2(0f, 0.5f));//1
            vh.AddVert(new Vector3(0, 100), color32, new Vector2(0f, 1f));//2
            vh.AddVert(new Vector3(50, 100), color32, new Vector2(0.5f, 1f));//3
            vh.AddVert(new Vector3(100, 100), color32, new Vector2(1f, 1f));//4
            vh.AddVert(new Vector3(100, 50), color32, new Vector2(1f, 0.5f));//5
            vh.AddVert(new Vector3(100, 0), color32, new Vector2(1f, 0f));//6
            vh.AddVert(new Vector3(50, 0), color32, new Vector2(0.5f, 0f));//7

            vh.AddTriangle(0, 1, 7);
            vh.AddTriangle(1, 2, 3);
            vh.AddTriangle(3, 4, 5);
            vh.AddTriangle(5, 6, 7);
            vh.FillMesh(mesh);
        }
    }
}

场景效果

1111.png

2222.png

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号