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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 设置几边形
|
|
/// </summary>
|
|
/// <param name="num"></param>
|
|
public void SetVerticeLength(int num)
|
|
{
|
|
if (num>=3)
|
|
{
|
|
vertices = new Vector3[num + 1];
|
|
edgeSizes = new float[num + 1];
|
|
SetVertices();
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置每条边的值
|
|
/// </summary>
|
|
/// <param name="i"></param>
|
|
/// <param name="value"></param>
|
|
public void SetEdgeSizes(int i,float value)
|
|
{
|
|
if (edgeSizes.Length > i)
|
|
{
|
|
edgeSizes[i] = value;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 刷新绘制
|
|
/// </summary>
|
|
public void Fresh()
|
|
{
|
|
Apply();
|
|
}
|
|
}
|