unity 贝塞尔曲线

前段时间研究贝塞尔曲线,做曲线路径动画

其实原理还是简单的做差值算法

        private void InstBezier(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3)
        {
            if (p0 == null || p1 == null || p2 == null || p3 == null)
            {
                isInsted = false;
                return;
            }
            for (int i = 0; i < pointNum; i++)
            {
                float ratio = i / (float)pointNum;
                Vector3 p0_1 = Vector3.Lerp(p0, p1, ratio);
                Vector3 p1_2 = Vector3.Lerp(p1, p2, ratio);
                Vector3 p2_3 = Vector3.Lerp(p2, p3, ratio);
                Vector3 p0_1_1_2 = Vector3.Lerp(p0_1, p1_2, ratio);
                Vector3 P1_2_2_3 = Vector3.Lerp(p1_2, p2_3, ratio);
                Vector3 p0_1_1_2_1_2_2_3 = Vector3.Lerp(p0_1_1_2, P1_2_2_3, ratio);
                pointList.Add(p0_1_1_2_1_2_2_3);
            }
            isInsted = true;
        }

 

再帖一段物体追踪曲线轨迹的代码

        private Vector3 Vector3ListLerp(float t)
        {
            if (t > 1)
            {
                t = 1;
            }
            float disRatio = bezierPath.totalDis * t;//已经跑了的距离

            float pointsDis = 0;
            float ratio = 0;

            for (int i = 0; i < bezierPath.pointList.Count - 1; i++)
            {
                float pointDis = Vector3.Distance(bezierPath.pointList[i], bezierPath.pointList[i + 1]);

                pointsDis += pointDis;

                if (pointsDis >= disRatio)
                {
                    currentPoint = bezierPath.pointList[i];
                    nextPoint = bezierPath.pointList[i + 1];
                    ratio = (disRatio - (pointsDis - pointDis)) / pointDis;
                    break;
                }
            }
            return Vector3.Lerp(currentPoint, nextPoint, ratio);
        }

代码解释。。就是一张图。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值