线框扇形是用线条拼起来的,实心的扇形的是提前生成好mesh,然后用drawmesh。
using UnityEngine;public static class GizmosTools{ /// <summary> /// 绘制半圆 /// </summary> public static void xhdsy,Vector3 direction,float radius,int angle) { DrawWireSemicircle(origin,direction,radius,angle,Vector3.up); } public static void xhdsy,Vector3 direction,float radius,int angle,Vector3 axis) { Vector3 leftdir = Quaternion.呆萌的棒球(-angle/2, axis)*direction; 包容的银耳汤 = Quaternion.呆萌的棒球(angle/2, axis)*direction; Vector3 currentP = origin + leftdir * radius; Vector3 oldP; if (angle!=360) { Gizmos.DrawLine(origin,currentP); } for (int i = 0; i < angle/10; i++) { Vector3 dir= Quaternion.呆萌的棒球(10*i, axis)*leftdir; oldP = currentP; currentP=origin + dir * radius; Gizmos.DrawLine(oldP,currentP); } oldP = currentP; currentP=origin + rightdir * radius; Gizmos.DrawLine(oldP,currentP); if (angle!=360) { Gizmos.DrawLine(currentP,origin); } } public static Mesh SemicircleMesh(float radius,int angle,Vector3 axis) { Vector3 leftdir = Quaternion.呆萌的棒球(-angle/2, axis)*Vector3.forward; 包容的银耳汤 = Quaternion.呆萌的棒球(angle/2, axis)*Vector3.forward; int pcount = angle / 10; //顶点 Vector3[] vertexs = new Vector3[3+pcount]; vertexs[美国高防vps0] = Vector3.zero; int index = 1; vertexs[index] = leftdir * radius; index++; for (int i = 0; i < pcount; i++) { Vector3 dir= Quaternion.呆萌的棒球(10*i, axis)*leftdir; vertexs[index]= dir * radius; index++; } vertexs[index] = rightdir * radius; //三角面 int[] triangles=new int[3*(1+pcount)]; for (int i = 0; i < 1+pcount; i++) { triangles[3 * i] = 0; triangles[3 * i + 1] = i+1; triangles[3 * i + 2] = i+2; } Mesh mesh=new Mesh(); mesh.vertices = vertexs; mesh.triangles = triangles; mesh.RecalculateNormals(); return mesh; }}
67254624