源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
3.5 KiB

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Radar : MonoBehaviour
  4. {
  5. //网格模型顶点数量
  6. private int VERTICES_COUNT;
  7. //大小
  8. public float scale = 1;
  9. [Tooltip("边数为数组长度减1")]
  10. //顶点数组
  11. private Vector3[] vertices = new Vector3[6] ;
  12. //三角形数组
  13. int[] triangles;
  14. //每条边的长度设置
  15. private float[] edgeSizes = new float[6];
  16. //基础长度
  17. public float baseSize = 0.01f;
  18. MeshFilter meshFilter;
  19. Mesh mesh;
  20. float pi = 3.1415f;
  21. void Start()
  22. {
  23. CreateMesh();
  24. SetVertices();
  25. }
  26. void OnGUI()
  27. {
  28. //if (meshFilter == null)
  29. //{
  30. // CreateMesh();
  31. // SetVertices();
  32. //}
  33. // Fresh(); // 这个是刷新
  34. //if (GUILayout.Button("Fresh"))
  35. //{
  36. // Fresh();
  37. //}
  38. //if (GUILayout.Button("Set"))
  39. //{
  40. // SetVerticeLength(10);
  41. //}
  42. //if (GUILayout.Button("SetEdgeSizes"))
  43. //{
  44. // SetEdgeSizes(10, 0.5f);
  45. //}
  46. }
  47. void CreateMesh()
  48. {
  49. meshFilter = (MeshFilter)GetComponent(typeof(MeshFilter)); //GameObject.Find("radar")
  50. mesh = meshFilter.mesh;
  51. }
  52. void SetVertices()
  53. {
  54. VERTICES_COUNT = vertices.Length;
  55. int triangles_count = VERTICES_COUNT - 1;
  56. triangles = new int[triangles_count * 3];
  57. //设定原点坐标
  58. vertices[0] = new Vector3(0, 0, 1);
  59. //首个在x轴上的坐标点
  60. vertices[1] = new Vector3(45, 0, 1);
  61. //每个三角形角度
  62. float everyAngle = 360 / triangles_count;
  63. for (int i = 1; i < vertices.Length; i++)
  64. {
  65. var angle = GetRadians(everyAngle * (i - 1));
  66. vertices[i] = new Vector3(45 * Mathf.Cos(angle), 45 * Mathf.Sin(angle), 1);
  67. }
  68. int idx = 0;
  69. int value = 0;
  70. for (int i = 0; i < triangles.Length; i++)
  71. {
  72. if (i % 3 == 0)
  73. {
  74. triangles[i] = 0;
  75. value = idx;
  76. idx++;
  77. }
  78. else
  79. {
  80. value++;
  81. if (value == VERTICES_COUNT)
  82. value = 1;
  83. // Debug.Log("value " + value);
  84. triangles[i] = value;
  85. }
  86. }
  87. }
  88. float GetRadians(float angle)
  89. {
  90. return pi / 180 * angle;
  91. }
  92. void Apply()
  93. {
  94. Vector3[] tmps = new Vector3[vertices.Length];
  95. for (int i = 0; i < vertices.Length; i++)
  96. {
  97. tmps[i] = vertices[i] * vertices[i].z * scale * (baseSize + edgeSizes[i]);
  98. }
  99. if (mesh == null) {
  100. CreateMesh();
  101. }
  102. mesh.vertices = tmps;
  103. mesh.triangles = triangles;
  104. }
  105. /// <summary>
  106. /// 设置几边形
  107. /// </summary>
  108. /// <param name="num"></param>
  109. public void SetVerticeLength(int num)
  110. {
  111. if (num>=3)
  112. {
  113. vertices = new Vector3[num + 1];
  114. edgeSizes = new float[num + 1];
  115. SetVertices();
  116. }
  117. }
  118. /// <summary>
  119. /// 设置每条边的值
  120. /// </summary>
  121. /// <param name="i"></param>
  122. /// <param name="value"></param>
  123. public void SetEdgeSizes(int i,float value)
  124. {
  125. if (edgeSizes.Length > i)
  126. {
  127. edgeSizes[i] = value;
  128. }
  129. }
  130. /// <summary>
  131. /// 刷新绘制
  132. /// </summary>
  133. public void Fresh()
  134. {
  135. Apply();
  136. }
  137. }