贝塞尔曲线制作跳跃轨迹
来源:互联网 发布:小学英语软件哪个好 编辑:程序博客网 时间:2024/05/22 02:15
最近正在进行的一个项目,需要做一个山羊跳跃的功能,因为起跳点和落地点的坐标都是已知并且不能更改的,于是就排除了使用物理引擎的方法。
一开始考虑的是使用球形插值的方法,代码如下:
jumpTime += 0.07f;
Vector3 center = (start + end) * 0.5f;
center -= new Vector3(0, 1, 0);
Vector3 startPos = start – center;
Vector3 endPos = end – center;
transform.position = Vector3.Slerp(startPos, endPos, jumpTime);
transform.position += center;
if (transform.position == end)
{
jump = false;
jumpTime = 0;
}
但是Vector3.Slerp球形插值获得的曲线过于平滑,弧线顶点取起跳坐标及落地坐标的中间点,导致跳跃动作过于僵硬不够逼真,所以最后还是采用了贝塞尔曲线去制作跳跃曲线。
贝塞尔曲线,学过图形图像的同学应该都知道。它是依据四个位置任意的点坐标绘制出的一条光滑曲线,而我们现在需要用到的只有三个点,起点,中点,和顶点。
一阶贝塞尔曲线(线段):
二阶贝塞尔曲线(抛物线):
三阶贝塞尔曲线:
跳跃曲线是一条抛物线,起点,中点。影响抛物线弧度的则是顶点坐标。我们要使用贝塞尔曲线则只需要套用公式即可:
private Vector3 start;
private Vector3 end;
private Vector3 center;
private bool isJump = false;
private float t = 0;
void Start()
{
start = new Vector3(0, 0, 0);
end = new Vector3(1, 1, 0);
center = new Vector3(0.5f, 3f, 0);
}void Update()
{
if (Input.GetKeyUp(“d”))
{
isJump = true;
}
if (isJump)
{
t += 0.05f;this.transform.position = Result(start, end, t);
}}
public Vector3 Result(Vector3 startPos, Vector3 endPos, float t)
{
if (t > 1)
{
t = 1;
}
return (1 – t) * (1 – t) * startPos + 2 * t * (1 – t) * center + t * t * endPos;
}
这样就可以根据自己的需求去修改顶点坐标,达到策划的要求了。
- 贝塞尔曲线制作跳跃轨迹
- 贝塞尔曲线移动轨迹
- ios 贝塞尔曲线轨迹更加平滑
- 利用贝塞尔曲线实现手指轨迹
- 贝塞尔曲线轨迹计算公式util
- 如何在地图上画曲线轨迹(贝塞尔曲线)
- 如何在地图上画曲线轨迹(贝塞尔曲线)
- 属性动画实现控件类似贝塞尔曲线轨迹移动效果
- 一种基于贝塞尔曲线的终端定位轨迹拟合方法
- 属性动画实现控件类似贝塞尔曲线轨迹移动效果
- RecycleView下的二次贝塞尔购物车轨迹曲线
- 3阶以下贝塞尔曲线轨迹库和任意轨迹库
- 3阶以下贝塞尔曲线轨迹库和任意轨迹库
- unity 贝塞尔曲线的制作
- playmaker制作玩家跳跃
- 几何画板制作贝塞尔曲线的方法
- 制作平滑的路径-贝塞尔曲线
- iTween曲线动画(沿着轨迹运动)
- android学习路线:如何成长为高级工程师
- Android初学习 - 4.0以后支持的Switch按钮
- 《CSS权威指南》读书笔记
- 177 - Nth Highest Salary
- maven跳过测试命令
- 贝塞尔曲线制作跳跃轨迹
- MyEclipse 启动 Tomcat 配置容器内存分配
- android改变全局字体大小
- NSSet介绍
- Andrew Ng 机器学习笔记(八)
- ida入门(3)
- 每天一个linux命令(30): chown命令
- 购物车飞入效果
- 转发和重定向