using UnityEngine; using System.Collections; public class Radar : MonoBehaviour { //网格模型顶点数量 private int VERTICES_COUNT; //大小 public float scale = 1; [Tooltip("边数为数组长度减1")] //顶点数组 private Vector3[] vertices = new Vector3[6] ; //三角形数组 int[] triangles; //每条边的长度设置 private float[] edgeSizes = new float[6]; //基础长度 public float baseSize = 0.01f; MeshFilter meshFilter; Mesh mesh; float pi = 3.1415f; void Start() { CreateMesh(); SetVertices(); } void OnGUI() { //if (meshFilter == null) //{ // CreateMesh(); // SetVertices(); //} // Fresh(); // 这个是刷新 //if (GUILayout.Button("Fresh")) //{ // Fresh(); //} //if (GUILayout.Button("Set")) //{ // SetVerticeLength(10); //} //if (GUILayout.Button("SetEdgeSizes")) //{ // SetEdgeSizes(10, 0.5f); //} } void CreateMesh() { meshFilter = (MeshFilter)GetComponent(typeof(MeshFilter)); //GameObject.Find("radar") mesh = meshFilter.mesh; } void SetVertices() { VERTICES_COUNT = vertices.Length; int triangles_count = VERTICES_COUNT - 1; triangles = new int[triangles_count * 3]; //设定原点坐标 vertices[0] = new Vector3(0, 0, 1); //首个在x轴上的坐标点 vertices[1] = new Vector3(45, 0, 1); //每个三角形角度 float everyAngle = 360 / triangles_count; for (int i = 1; i < vertices.Length; i++) { var angle = GetRadians(everyAngle * (i - 1)); vertices[i] = new Vector3(45 * Mathf.Cos(angle), 45 * Mathf.Sin(angle), 1); } int idx = 0; int value = 0; for (int i = 0; i < triangles.Length; i++) { if (i % 3 == 0) { triangles[i] = 0; value = idx; idx++; } else { value++; if (value == VERTICES_COUNT) value = 1; // Debug.Log("value " + value); triangles[i] = value; } } } float GetRadians(float angle) { return pi / 180 * angle; } void Apply() { Vector3[] tmps = new Vector3[vertices.Length]; for (int i = 0; i < vertices.Length; i++) { tmps[i] = vertices[i] * vertices[i].z * scale * (baseSize + edgeSizes[i]); } if (mesh == null) { CreateMesh(); } mesh.vertices = tmps; mesh.triangles = triangles; } /// /// 设置几边形 /// /// public void SetVerticeLength(int num) { if (num>=3) { vertices = new Vector3[num + 1]; edgeSizes = new float[num + 1]; SetVertices(); } } /// /// 设置每条边的值 /// /// /// public void SetEdgeSizes(int i,float value) { if (edgeSizes.Length > i) { edgeSizes[i] = value; } } /// /// 刷新绘制 /// public void Fresh() { Apply(); } }