基本知识:
1.在已知一个向量的情况下,要求出这个向量演某一轴旋转之后的向量,可以用Quaternion.Euler(x,x,x)*老向量来求出新的向量,角度一定要放在前面,因为unity只有角度*向量的重载方法,没有向量*角度的。
2.向量+起始点 = 末尾点。
上代码。考虑到物体可能会经过旋转,而包围圆不能旋转计算点时前方都用世界坐标系Vector3.forward。
public List<Vector3> Points = new List<Vector3>();
public float radius = 10f;
public int pointCount = 50;
public float angle;
public bool IsRendering = false;
LineRenderer rend;
// Use this for initialization
void Start () {
angle = 360f / pointCount;
rend = GetComponent<LineRenderer>();
}
void CalculationPoints()
{
Vector3 v = transform.position + Vector3.forward * radius;//求出的是终点之一的一个坐标位置
print(transform.position);
Points.Add(v);
Quaternion r = Quaternion.identity;//不能跟随着物体的旋转而旋转,否则如果物体的自身坐标系和世界坐标系不一样了,产生的旋转会导致后面的点和初始点高度可能不一样。
for (int i = 1; i < pointCount; i++)
{
Quaternion q = Quaternion.Euler(r.eulerAngles.x,r.eulerAngles.y-i*angle,r.eulerAngles.z);
v = q*Vector3.forward*radius/*求出的是终点之一坐标位置-起点位置的一个向量后旋转得到的新向量*/+transform.position;
Points.Add(v);
}
}
void DrawLines()
{
rend.positionCount = pointCount + 1;
rend.startWidth = 0.2f;
rend.endWidth = 0.2f;
for (int i = 0; i < pointCount; i++)
{
rend.SetPosition(i,Points[i]);
}
rend.SetPosition(pointCount,Points[0]);
}
void ClearPoints()
{
Points.Clear();
}