贝塞尔曲线的应用


1.实际效果

做游戏要的就是一些华丽的效果。比如物品的拾取特效,能量收集特效等等需要运动轨迹的地方。

利用贝塞尔曲线做的实际效果图:


(好吧这个效果图有点坑爹。不过尼玛不要嫌弃QQ截图就这样了) 

单帧效果:


2.大致原理

感觉是不是很炫酷呀!做这样的效果首先要了解下贝赛尔曲线这个东东(好吧实际上你完全不需要理解这个东东只要知道有这个东西。然后公式什么的内事找百度就好)


一阶贝塞尔曲线(线段):



实际效果就是一个线性插值

来来来美少年们,一阶段的咱暂时不用,主要用的是二阶段的公式


二阶贝塞尔曲线(线段)

整个路径是由定点P0、P1、P2三个点来确定的。 效果如下:



 


接下来的三阶段,四阶段xx阶段你可以看下百度内容:

http://baike.baidu.com/view/60154.htm?fr=aladdin



3.项目代码

实际项目中的代码,只要根据公式计算就可以了。

提供一个简单的例子


using UnityEngine;
using System.Collections;

/// <summary>
/// 贝塞尔曲线
/// </summary>
public class BezierVFX : MonoBehaviour {

    public Vector3 startPosition;
    public Vector3 endPosition;
    public Vector3 anchorPoint;

    [SerializeField]
    private float m_Duration;
    private float m_survivalTime;//结束之后保留的时间
    private float m_Time;
    private bool m_Begin = false;
    private Transform mTrans;

    public Transform cachedTransform { get { if (mTrans == null) mTrans = transform; return mTrans; } }

	void Start () 
    {
        m_Time = 0;
        m_Begin = false;
	}
	
	void Update () 
    {
        if (!m_Begin)
        {
            return;
        }
        m_Time += Time.deltaTime;

        float t = m_Time / m_Duration;
        t = Mathf.Clamp01(t);
        t = t * t;//曲线

        Vector3 pos = (1 - t) * (1 - t) * startPosition + 2 * t * (1 - t) * anchorPoint + t * t * endPosition;

        cachedTransform.position = pos;

        if (m_Time > m_Duration+0.5f)
        {
            Destroy(gameObject);
            m_Begin = false;
        }
	}

    public void Begin(float fDuration)
    {
        m_Begin = true;
        m_Duration = fDuration;
    }

    public void SetDuration(float fDuration)
    {
        m_Duration = fDuration;
    }
}





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值