Unity2D中实现子弹的弧线轨迹

  • 前言
  • 设计思路
  • 代码实现
  • 第一次发blog的感想

前言

大家好!我是第一次写blog的Unity2D初学者,最近在研究射击RPG时看到一些比较酷炫的弧线子弹射击,很多2D平台射击游戏、弹幕射击游戏都使用了这种功能,今天试着做了一下这个功能的实现,和大家分享下。

这里借用bilibili视频av54898959的图片,具体思路也借鉴于这个视频,大家可以去看看~
视频传送门:如何做出漂亮的追踪子弹轨迹

设计思路

首先对弧线运动做一下几何分析,如下图:

这里我们看到,其实弧线运动时,每一刻的速度都遵循同一个特点:都偏向目标点的同一侧且为弧线外侧。因此可以构想出两种思路:

  1. 逐帧矫正
    在每一帧中都先将子弹朝向矫正向正对目标点,然后在这个方向的基础上进行一定程度的偏转,保证每一刻的速度组合为弧线的切线;
  2. 利用插值法
    在加载物体时将初始朝向设置为存在较大偏转,然后利用插值法(这里是使用弧型插值Slerp方法)逐帧向正对目标点的方向靠近,实现“弧线接近”的感觉。

代码实现

方法1的实现:

    float moveSpeed;Vector3 moveDir;Vector3 destination;float targetAngle,circleAngle;//矫正用的角度和偏离用的角度// Start is called before the first frame updatevoid Start(){moveSpeed = 7;circleAngle = 40;//弧线中矫正后偏转方向destination = new Vector3(3.49f, 0, 0);moveDir = Vector3.right;}//每一帧矫正指向目标,并添加偏转// Update is called once per framevoid Update(){//获取当前目标方向moveDir = destination - thistf.position;targetAngle = 360 - Mathf.Atan2(moveDir.x, moveDir.y) * Mathf.Rad2Deg;//矫正方向到正对目标点this.transform.eulerAngles = new Vector3(0, 0, 90 + targetAngle);//产生偏移以制造弧度this.transform.rotation = this.transform.rotation * Quaternion.Euler(0, 0, circleAngle);//translate方法的位移在不输入第二个参数的情况下默认基于self坐标系this.transform.Translate(Vector3.right * Time.deltaTime * moveSpeed);}

方法2的实现:
先放个鬼畜版的错误教学(螺旋升天哈哈哈)

    void Update(){this.transform.right = Vector3.Slerp(this.transform.up, destination - this.transform.position, 0.5f/Vector3.Distance(destination,this.transform.position));this.transform.position += this.transform.up * moveSpeed * Time.deltaTime;}

这是正确的代码:

    //方法2:基于Slerp方法矫正指向,初始化时的朝向可以任意设置void Update(){//这里第三个float参数为偏转速度,设置为越靠近值越大,以免接近的趋势不够无法击中目标this.transform.right = Vector3.Slerp(this.transform.right, destination - this.transform.position, 0.5f/Vector3.Distance(destination,this.transform.position));this.transform.position += this.transform.right * moveSpeed * Time.deltaTime;}

注意一下:
这里的right向量取决于你子弹sprite的指向,像我用的图片就是右方为正向,如果你的图片是以上方为正方就应该写为Vector3.up和transform.up。

第一次发blog的感想

第一次发blog,之前更多的是在CSDN这个资源充足,大佬云集的平台上了解知识。这次开始写blog一方面是为了给自己对知识的掌握更深入,一方面也希望能把自己学习的知识分享给其他人,如果您看到这篇blog觉得有所帮助,那就再好不过了,谢谢您的关注!

Unity2D中实现子弹的弧线轨迹相关推荐

  1. 六轴机器人轨迹规划(直线轨迹规划,弧线轨迹规划)——C#实现+ABB为例(规划直接下发离线程序运动)

    机器人直线插补算法,弧线插补算法+离线编程转换(空间直线插补规划.空间弧线插补规划.离线编程.ABB二次开发.六轴机器人控制.C#) 一,通过对空间点的插补,形成空间点轨迹 1.插补算法原理简述: ( ...

  2. 如何在不使用任何图像或跨度标签的情况下通过CSS在UL / LI html列表中设置子弹颜色[复制]

    本文翻译自:How to set Bullet colors in UL/LI html lists via CSS without using any images or span tags [du ...

  3. 在Django中,“子弹”是什么?

    当我阅读Django代码时,我经常在模型中看到所谓的"子弹". 我不太清楚这是什么,但是我知道它与URL有关. 应该如何以及何时使用这种this子? (我已经在本词汇表中阅读了其定 ...

  4. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )

    文章目录 一.CE 中获取子弹动态地址前置操作 二.OD 中调试子弹数据 一.CE 中获取子弹动态地址前置操作 在上一篇博客 [Windows 逆向]OD 调试器工具 ( CE 工具通过查找访问的方式 ...

  5. 【Windows 逆向】OD 调试器工具 ( CE 工具通过查找访问的方式找到子弹数据基地址 | 使用 OD 工具附加游戏进程 | 在 OD 工具中查看子弹数据地址 | 推荐 )

    文章目录 前言 一.CE 工具通过查找访问的方式找到子弹数据基地址 二.使用 OD 工具附加游戏进程 三.在 OD 工具中查看 058E2F1C 地址数据 前言 上一篇博客 [Windows 逆向]O ...

  6. vue是否可以做行车轨迹_在vue中高德地图引入和轨迹的绘制的实现

    高德地图引入和轨迹的绘制 1.第一步 vue中使用cdn引入高德地图,并在main.js中进行全局配置.(百度上有高德地图引入与配置方法,这里就不详细介绍): 1)npm install vue-am ...

  7. 在Matlab中绘制系统的根轨迹图

    在Matlab中绘制系统的根轨迹图 例如某系统的开环传递函数为: 通过上面的开环传递函数可以直接求出2个开环共轭复零点,以及5个开环极点,然后确定根轨迹分支数-自己画根轨迹图的话还是比较麻烦的,这么简 ...

  8. java堆栈异常_Java中获得异常堆栈使用轨迹的方法是。

    Java中获得异常堆栈使用轨迹的方法是. 答:fillinStack() 中国大学MOOC: 互联网金融品牌建设能增加客户对企业的依赖度,促使客户重复使用某个企业产品或服务,从而产生一定的客户黏性 答 ...

  9. 卡内基梅隆大学梁俊卫:视频中行人的多种未来轨迹预测

    不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...

最新文章

  1. java 获取linux mac_java在linux获得ip地址和mac
  2. android双重for循环,Android实现ViewPager无限循环效果(二)
  3. 《编程珠玑》笔记3 数据结构选择
  4. 收藏 | 史上最全的“大数据”学习资源
  5. 网络名称 转换 网络地址_网络地址转换| 计算机网络
  6. linux 网络io命令详解,Linux下五种网络IO模型详解
  7. 开源 free的理解_如何理解任何开源混乱
  8. 第一个关于selenium项目
  9. sql server 入门_SQL Server中的数据挖掘入门
  10. 在redis上实现分布式锁
  11. 51cto shell mysql备份数据库_shell脚本备份MYSQL数据库
  12. android 自定义键盘长按事件,Android触发事件总结(触摸屏事件,手势识别,键盘事件,模拟鼠标/按键事件)...
  13. phpwind升级php7,phpwind v8.7 升级教程图文说明
  14. Ubuntu 18.04 如何调整桌面图标大小
  15. 谷歌SEO入门的基础知识
  16. 计算机毕业设计(80)php小程序毕设作品之视频播放电影小程序系统
  17. 支付宝 APP登录 获取用户信息 PHP
  18. python自动化介绍
  19. 关闭localized intellij idea切换语言提醒
  20. 曝光程序员的桌面!有点心酸 |每日趣闻

热门文章

  1. 合并多个HEX文件的方法
  2. 固定资产的日期之折旧日期研究
  3. VCF文件转成Excel
  4. 研究生阶段该怎么学习
  5. 电影网站站架构(第一版)
  6. jbook移植完毕后发现订阅时发送的连接不能用,图片显示不出来。
  7. OpenMLDB 社区月报 | 2022年11月
  8. 怎样把txt导入python_python 将txt导入excel
  9. 使用matlab实现ISD悬架离散仿真分析
  10. 关于IE10+不支持条件注释的解决办法