Unity-Graphic绘制菱形Rhombus

xiaoxiao2021-02-28  130

游戏开发中经常用到属性图绘制,恰巧最近又一次用到。上传一下供大家使用

绘制菱形还是需要回归到绘制三角形,以下是六菱形基于Graphic的绘制。上代码

using System.Collections;

using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [ExecuteInEditMode]//Editor非运行下测试使用 public class SixRhombusImage : Graphic {     public float[] hexVlaue = new float[] { 1f, 0.5f, 1, 0.5f, 1, 0.5f, 1, 0.5f, 1, 0.5f, 1, 0.5f };     protected override void OnPopulateMesh(VertexHelper vh)     {         vh.Clear();         UIVertex vert = UIVertex.simpleVert;         Vector2 corner2 = Vector2.zero;         corner2.y = 1f;         corner2.y -= rectTransform.pivot.y;         corner2.y *= rectTransform.rect.height;         var v = new Vector3(0, corner2.y, 0);                  vert.position = new Vector3(0,0,0);         vert.color = color;         vh.AddVert(vert);         float r = 0;              for (int i = 0; i < hexVlaue.Length; i++)         {             Vector3 pos = Quaternion.Euler(0, 0, r) * (v * hexVlaue[i]);             vert.position = pos;             vert.color = color;             vh.AddVert(vert);             r -= 30;         }         vh.AddTriangle(0, 1, 2);         vh.AddTriangle(0, 2, 3);         vh.AddTriangle(0, 3, 4);         vh.AddTriangle(0, 4, 5);         vh.AddTriangle(0, 5, 6);         vh.AddTriangle(0, 6, 7);         vh.AddTriangle(0, 7, 8);         vh.AddTriangle(0, 8, 9);         vh.AddTriangle(0, 9, 10);         vh.AddTriangle(0, 10, 11);         vh.AddTriangle(0, 11, 12);         vh.AddTriangle(0, 12, 1);     }     /// <summary>     /// 六维属性     /// </summary>     /// <param name="hexVlaue">数组长度6</param>     public void SetSixValue(float[] vlaue)     {         if(vlaue.Length != 6)         {             Debug.LogError("please set six value!");             return;         }         //0、2、4、6、8、10         for (int i = 0; i < vlaue.Length; i++)         {             this.hexVlaue[i * 2] =  vlaue[i];         }         this.SetVerticesDirty();//重绘     } }
转载请注明原文地址: https://www.6miu.com/read-17303.html

最新回复(0)