游戏开发中经常用到属性图绘制,恰巧最近又一次用到。上传一下供大家使用
绘制菱形还是需要回归到绘制三角形,以下是六菱形基于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();//重绘 } }