什么是抛物线?

  以数学知识来定义的话,抛物线是在平面内到定点与定直线的距离相等的点的轨迹叫做抛物线。定点就是抛物线的焦点,定直线就是抛物线的准线。从物理上来说的话,抛物线就是将一个物体抛出去以后,物体运动的轨迹。当然,在Unity中我们是从物体的运动学的方面来研究的。

在Unity中什么时候需要用到抛物线呢?

  在Unity中,抛物线一般是用来描绘物体的运动轨迹,添加拖尾特效或者计算物体的预发射轨迹,用来实现物体的发射瞄准线的。在愤怒的小鸟中,大炮发射、弓箭射击等等游戏中都可以应用到。

抛物线运动的种类?

抛物线运动分为两种:
1.平抛运动:物体只具有水平方向的初速度,在被抛物以后,在水平方向做匀速运动,在竖直方向做自由落体运动(忽略其他的阻力影响)。如图所示:

2.斜抛运动:不但在水平方向有初速度的水平分量,还有竖直方向上的初速度竖直分量,水平方向上做匀速直线运动,在竖直方向上做初速度不为零的匀变速运动,而不是自由落体运动

很明显,在愤怒的小鸟和弓箭射击等等游戏中,物体都是做斜抛运动,所以本文也是主要研究斜抛运动!

斜抛轨迹实现的主要思路:

首先获得物体的物体的初速度,根据以上斜抛运动的思路我们可以将速度分为水平方向的速度和竖直方向的速度。在水平方向上,物体是做匀速直线运动,那么就直接利用公式Sx = Vxt就可以求出物体在水平方向上的位移。在竖直方向上,物体是做初速度不为零的匀变速运动,那么我们就需要利用公式:Sy = Vyt-0.5gt2来计算物体在竖直方向上的位移,其中g表示重力加速度,t表示运动的时间。最后将物体的初始位置,加上t时刻之后,物体在水平和竖直方向的位移就可以得到t时刻的位置了。然后我们只需要修改t的值就可以计算出整条轨迹啦!

实现代码如下:

博主实现的是愤怒的小鸟的瞄准线,具体代码如下:

    private void Draw(float distance){Vector3 origin = transform.position;//记录当前位置//发射点和小鸟之间的位置相减就是初速度的方向,然后乘以抛出的力度和拉伸的距离Vector2 MoveSpeed = (firePoint.position - transform.position).normalized * throwSpeed * distance;//定义一个列表存放所有的计算的点List<Vector2> pointList = new List<Vector2>();pointList.Add(transform.position);//第一个点就是当前物体的点//通过第一个点逐步计算下一个点for (int i = 1; i < 50; i++)//随便先计算五十个点{float time = i * 0.02f * 5;//每隔0.1秒计算一次float timePow = time * time;//time的平方//下一个点Vector2 point = new Vector2(pointList.First().x + MoveSpeed.x * time, pointList.First().y + MoveSpeed.y * time - 0.5f * Physics2D.gravity.magnitude * timePow);//进行射线检测,判断和上一个是否有障碍阻挡,有阻挡就结束计算Ray2D ray2D = new Ray2D(pointList.Last(),point-pointList.Last());//创建射线RaycastHit2D hit = Physics2D.Raycast(ray2D.origin,ray2D.direction,Vector2.Distance(pointList.Last(),point));//发射射线if (hit.collider!=null){Debug.Log("中间有障碍物阻挡了!!" + hit.collider.name);break;}else{pointList.Add(point);//加入到点的列表中}}}

然后遍历得到的pointList列表实例化你需要的轨迹圆圈或者其他物体就好啦。

效果图如图所示:

总结:

  添加了瞄准线的你是不是就像装了八倍镜一样百发百中了呢?总体实现起来不难的,只需要根据物理公式计算就好了。博主也是初学Unity,有不足欢迎各位大佬留言评论指教指正!

Unity中抛物线的实现相关推荐

  1. unity 模拟抛物线

    具体的步骤: 了解使用 水平方向的速度是:v1=v0×cosθ 竖直方向的速度是:v2=v0×sinθ-gt y=v0×t-(gt^2)/2 克隆线段,坐标信息,线段的长度,线段的间距. 检测碰撞的点 ...

  2. unity 模拟抛物线 1

    具体的步骤: 了解使用 水平方向的速度是:v1=v0×cosθ 竖直方向的速度是:v2=v0×sinθ-gt y=v0×t-(gt^2)/2 克隆线段,坐标信息,线段的长度,线段的间距. 检测碰撞的点 ...

  3. Unity中绘制抛物线

    效果如下: 之所以加个2,是因为我以前写过一个抛物线的文章,之前的文章请看这: Unity绘制抛物线代码 上一篇文章只是简单地绘制了一个抛物线,但是无法随意移动或者旋转,最近因为做个项目可能会用到这个 ...

  4. 【用Unity实现抛物线向目标点发射炮弹功能】

    用Unity实现抛物线向目标点发射炮弹功能 游戏开发中经常会涉及到制作向特定的目标点投掷物体的功能,比如:塔防类.射击类.即时战斗类游戏-等等,首先需要明确的一点是,要打中目标点,发射的角度.发射点与 ...

  5. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  6. 学习用C#在Unity中创建一个2D Metroidvania游戏

    学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计,水平提升,米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Lear ...

  7. 在Unity中制作4种不同的游戏

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:8.6 GB 含课程素材 |时长:15h ...

  8. 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...

  9. Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity

    Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity MP4 |视频:h264,1280x720 |音频:A ...

最新文章

  1. 硬核推荐:博主神器OpenWrite,免费的一文多发平台,无需部署,注册即用,安全可靠!...
  2. 同一个Spring-AOP的坑,我一天踩了两次,深坑啊
  3. “毕设导师互选系统”项目产品宣传推广方案
  4. 关于C++中的pow()函数
  5. 使用OpenCV进行简单的图像分割
  6. Linux小技巧:生成随机字符串
  7. Unity3D内容加密保护
  8. NSSM - 将任何exe应用封装成windows服务的神器
  9. android版here地图下载,HERE WeGo地图安卓版
  10. 720yun全景图+vue
  11. k8s中Ingress安装
  12. 数学归纳法产生的历史背景
  13. 可编程并行接口8255(实验一)
  14. IM即时通讯项目讲解(一) 实现类似qq微信表情面板无缝切换
  15. 腾讯大佬的 Python 编码规范
  16. SQL 日期和时间处理函数
  17. 一张图带你看懂UML类图
  18. 倍频程频谱_倍频程科学编程语言速成课程
  19. 厦门大学869生态学考研参考书目
  20. 高维全局优化 —— DG2

热门文章

  1. 实验2 运算器的编程实现
  2. 初识js-charts和E-charts
  3. Android生命周期详解
  4. 帆软10.0 冻结行 冻结列的 点击行变色
  5. Java 8 新特性|Collectors.joining()
  6. Win11玩游戏掉帧的解决方法
  7. 万兴剪刀手去水印教程_万兴神剪手怎么去水印 神剪手去水印操作详解
  8. kafka系列(4)- kafka集群操作
  9. python下载电影_Python抓取电影天堂电影信息的代码
  10. andriod studio实现界面切换