优质网站建设是哪家,昆明网站制作的教程,佛山知名营销网站开发,做网站的前端框架前言
本文教你怎么用贝塞尔曲线驱动一个飞行特效
中间点的准备
开放一些可以给策划配置的变量
startPos flyEffect.transform.position;
var right (GetAimPoistion(targetActor) - flyEffect.transform.position).x 0?1:-1;
midPos startPos new Vector3(righ…前言
本文教你怎么用贝塞尔曲线驱动一个飞行特效
中间点的准备
开放一些可以给策划配置的变量
startPos flyEffect.transform.position;
var right (GetAimPoistion(targetActor) - flyEffect.transform.position).x 0?1:-1;
midPos startPos new Vector3(right*Mathf.Tan((angle*Mathf.PI)/180)*height,height,0);
public int angle 45;//向上角度
public int height 2;//飞行上浮高度三次贝塞尔曲线是一种数学工具可以用来描述一条平滑的曲线它由四个控制点决定起始点、终止点和两个中间点。起始点和终止点是曲线的端点而中间点是用来调整曲线的形状和方向的。中间点越靠近起始点或终止点曲线就越接近直线中间点越远离起始点或终止点曲线就越弯曲。
在这段代码中midPos是一个中间点它用来控制飞行效果的物体的移动轨迹。为了让物体沿着一条抛物线飞行midPos需要满足以下条件 • midPos的x坐标要和startPos的x坐标相差一个固定的值这个值由right、angle和height决定。right是一个整数表示物体飞行的方向如果是正数表示向右飞行如果是负数表示向左飞行。angle是一个角度表示物体飞行的初始角度。height是一个高度表示物体飞行的最高点。这三个变量可以在编辑器中调整以改变物体飞行的效果。
• midPos的y坐标要等于startPos的y坐标加上height这样就可以让物体飞到最高点。
• midPos的z坐标要等于startPos的z坐标这样就可以让物体在同一个平面上飞行。
具体计算公式
开飞
if (triggered !!flyEffect)
{ removeEffect(_action); return;
} float t _localTime / costTime;
t Mathf.Clamp(t, 0, 1);
if(t 1) triggered true; var targetPos GetAimPoistion(targetActor);
flyEffect.transform.position (1 - t) * (1 - t) * startPos 2 *t* (1 - t) * midPos t * t * targetPos;• 首先它检查了一个布尔变量triggered和一个对象变量flyEffect的值如果triggered为真且flyEffect不为空那么它就调用了一个函数removeEffect用于移除飞行效果并结束了这段代码的执行。
• 然后它计算了一个浮点变量t表示飞行效果的物体移动的进度它的值是当前时间_localTime除以总时间costTime然后用Mathf.Clamp函数将其限制在0到1之间。
• 接着它判断了t是否大于等于1如果是就将triggered设为真表示飞行效果已经完成。
• 最后它调用了一个函数GetAimPosition用于获取目标物体targetActor的位置并将其赋值给一个向量变量targetPos。然后它用一个三次贝塞尔曲线公式计算了飞行效果的物体的当前位置并将其赋值给flyEffect.transform.position。这个公式使用了起始位置startPos、中间位置midPos和目标位置targetPos作为控制点用t作为参数
什么是ObjectTemplate
ObjectTemplate是一个用于在运行时创建对象的模板。它可以定义对象的属性和方法以及对象与其他对象的关系。其实就是用来存特效的句柄然后把特效存为GO飞出去。