Unity用LineRenderer画一个围绕着物体的圆

基本知识:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustEasyCode

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值