源战役客户端
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

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();
}
}