using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ShowSphereColider : MonoBehaviour { //画线用的材质球 Material lineMat; private float subdivide =305.7f; //细分数 void OnEnable() { if (lineMat == null) { lineMat = Resources.Load<Material>("Materials/LineMat"); } } void OnRenderObject() { SphereCollider sphereCollider = GetComponent<SphereCollider>(); if (!sphereCollider.enabled||sphereCollider==null) { return; } Vector3 center = sphereCollider.center; float radius = sphereCollider.radius; lineMat.SetPass(0); GL.Begin(GL.LINES); GL.Color(Color.green); float step = 1.0f / subdivide ; for (float i=0; i < 1; i+=step) { Vector3 p1 = GraphLib.Circle(i, radius); Vector3 p = new Vector3(p1.x+center.x, p1.y+center.y, p1.z+center.z); p=transform.TransformPoint(p); GL.Vertex(p); } for (float i = step; i < 1.0f+step; i += step) { Vector3 p1 = GraphLib.Circle(i, radius); Vector3 p = new Vector3(p1.x + center.x, p1.y + center.y, p1.z + center.z); p = transform.TransformPoint(p); GL.Vertex(p); } GL.End(); GL.Begin(GL.LINES); GL.Color(Color.green); for (float i = 0; i < 1; i += step) { Vector3 p1 = GraphLib.Circle(i, radius); Vector3 p = new Vector3(p1.x + center.x, p1.z + center.y, p1.y + center.z); p = transform.TransformPoint(p); GL.Vertex(p); } for (float i = step; i < 1.0f+step; i += step) { Vector3 p1 = GraphLib.Circle(i, radius); Vector3 p = new Vector3(p1.x + center.x, p1.z + center.y, p1.y + center.z); p = transform.TransformPoint(p); GL.Vertex(p); } GL.End(); GL.Begin(GL.LINES); GL.Color(Color.green); for (float i = 0; i <1.0f; i += step) { Vector3 p1 = GraphLib.Circle(i, radius); Vector3 p = new Vector3(p1.y + center.x, p1.x + center.y, p1.z + center.z); p = transform.TransformPoint(p); GL.Vertex(p); } for (float i = step; i < 1.0f+step; i += step) { Vector3 p1 = GraphLib.Circle(i, radius); Vector3 p = new Vector3(p1.y + center.x, p1.x + center.y, p1.z + center.z); p = transform.TransformPoint(p); GL.Vertex(p); } GL.End(); } }
//s角度 0-1之间 r:半径 public static Vector3 Circle(float s,float r) { Vector3 p; p.x =r* Mathf.Cos(2*Mathf.PI * s); p.y = 0; p.z =r* Mathf.Sin(2*Mathf.PI * s); return p; }