
1using System.Collections.Generic; 2using UnityEngine; 3 4[RequireComponent(typeof(MeshFilter),typeof(MeshRenderer))] 5public class Radar : MonoBehaviour 6{ 7 [Tooltip("属性边长")] 8 public float radius = 45; 9 [Range(0, 1), Tooltip("当前属性百分比")] 10 public List<float> m_attributes; 11 12 private float m_cell_angle; 13 private List<Vector3> m_vertices = new List<Vector3>(); 14 private int[] m_triangles; 15 16 private MeshRenderer m_render; 17 private MeshFilter m_filter; 18 private Mesh m_mesh; 19 20 private void Awake() 21 { 22 m_render = GetComponent<MeshRenderer>(); 23 m_filter = GetComponent<MeshFilter>(); 24 m_mesh = new Mesh(); 25 m_filter.mesh = m_mesh; 26 if (m_render.material == null) 27 { 28 Debug.LogWarning("请添加Material"); 29 } 30 } 31 32 void Start() 33 { 34 if (m_attributes.Count != 0) 35 { 36 m_cell_angle = 360 / m_attributes.Count; 37 InitMeshData(); 38 } 39 } 40 41 private void Update() 42 { 43 if (Input.GetKeyDown(KeyCode.Space)) 44 { 45 Refresh(); 46 } 47 } 48 49 void InitMeshData() 50 { 51 #region 设置顶点 52 m_vertices.Clear(); 53 m_vertices.Add(new Vector3(0, 0, 1)); 54 m_vertices.Add(new Vector3(radius, 0, 1)); 55 56 for (int i = 0; i < m_attributes.Count; i++) 57 { 58 float angle = Mathf.Deg2Rad * m_cell_angle * (i + 1); 59 Vector3 point = new Vector3(radius * Mathf.Cos(angle), radius * Mathf.Sin(angle), 1); 60 m_vertices.Add(point); 61 } 62 #endregion 63 64 #region 设置三角形 65 m_triangles = new int[m_attributes.Count * 3]; 66 67 int index = 0; 68 int value = 0; 69 for (int i = 0; i < m_triangles.Length; i++) 70 { 71 if (i % 3 == 0) 72 { 73 m_triangles[i] = 0; 74 value = index; 75 index++; 76 } 77 else 78 { 79 value++; 80 if (value == m_attributes.Count + 1) 81 value = 1; 82 m_triangles[i] = value; 83 } 84 } 85 #endregion 86 } 87 88 void Refresh() 89 { 90 Vector3[] vertices = m_vertices.ToArray(); 91 92 for (int i = 2; i < m_vertices.Count; i++) 93 { 94 vertices[i] = m_vertices[i] * m_attributes[i - 2]; 95 } 96 97 m_mesh.vertices = vertices; 98 m_mesh.triangles = m_triangles; 99 m_mesh.RecalculateNormals(); 100 } 101}
View Code
转载:https://blog.csdn.net/zjw1349547081/article/details/53667690