unity 在Scene中,绘制一个圆锥体

分类: unity3d |
http://s9/mw690/005N7Rnmzy7bGv21swg78&690在Scene中,绘制一个圆锥体" TITLE="unity 在Scene中,绘制一个圆锥体" />
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class JarodConeDemo : MonoBehaviour {
public float beginAngle;//起始角度
public float endAngle;//结束角度
public Vector3 beginPoint;
public Vector3 targetPoint ;
[Range(3,20)]
public int totalPoint = 10;
[Range(0,2)]
public float radius;
public GameObject obj = null;
public Vector3 pointUp;
public Quaternion originQuaternion;
public List pointList;
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawLine (beginPoint, targetPoint);
Vector3 dirTemp = targetPoint - beginPoint;
if (obj == null) {
obj = new GameObject ();
pointList = new List ();
return;
}
originQuaternion = Quaternion.LookRotation (dirTemp);
Gizmos.color = Color.green;
pointList.Clear();
for (int i = 0; i <= totalPoint;
++i)
{
obj.transform.rotation = originQuaternion;
obj.transform.Rotate (Vector3.forward,
beginAngle+i*(endAngle-beginAngle)/totalPoint);
pointUp = obj.transform.up * radius;
Gizmos.DrawLine (targetPoint, targetPoint + pointUp);
pointList.Add (targetPoint + pointUp);
}
Gizmos.color = Color.yellow;
for (int i = 0; i < totalPoint;
++i)
{
Gizmos.DrawLine (pointList[i], pointList[i+1]);
}
Gizmos.color = new Color (1, 1, 1, 0.3f);
for (int i = 0; i <= totalPoint;
++i)
{
Gizmos.DrawLine (pointList[i],beginPoint);
}
}
}
我们可以通过两点,确认一条直线,
但是,与这个直线垂直的面,却有无数个,
如果我们知道这条直线上的一个点,
那么,与这条直线垂直的面,是唯一的。
这里,我借助了 unity 自身的 GameObject ,
将其坐标和角度都确定好了之后,
我们假设,这个物体,是一个 石英表盘,
12点的方向,就像是我们头顶的方向,
如果我们张开胳膊,摆出 十字架的姿势,
那么,3点,9点,6点,对应了我们的 左右手和脚。
如果我们将钟表以垂直于自己表盘的方向进行旋转,
那么,我们头顶,就会绕着表盘的中心进行旋转。
就像秒针 指向 12点,又指向 1点,又指向 2点,顺时针,
正好经过了整个表盘的 360度 。
我们每隔一定的角度,记录下当前指针所处在的空间位置,
再将这些位置连接起来,就能形成一个 圆形,或者 扇形的面。
后一篇:颜色设置