坦克项目的炮塔旋转BUG记录——Unity随手记(2020.11.19)

今天解决了一个BUG,写篇博客记录一下。
预先说明,其实这个BUG凭我自己是解决不了的,因为说实话,直到它解决了我也没有搞懂为什么会触发这个BUG。在这里请允许我先挂一下帮助我解决了问题的那个大佬的作品:
Unity3D: Gun Turret Rotation (Download in Description)
真的是个宝藏项目,我能学到不少。
从他的视频下方的GitHub链接下载下来的项目帮我找到了问题,就是他
这个世界坐标的rotation造成了这一切
BUG长成这样:二战美军谢尔曼的真实战斗力(bushi)
是的,因为太迷了所以发视频纪念了。用语言描述一下就是,这个旋转炮塔按照图上的代码写,只要坦克本体转了,炮塔就会像直升飞机一样转个不停。至于为什么会产生这个BUG呢?
之前本来是没有的,参考16号的随手记,但是原来那个也是有问题的,问题体现在炮塔由于绕世界坐标旋转,而我的代码又要防止炮塔沿x,z轴旋转,所以导致坦克炮塔永远保持世界坐标轴的水平,即使坦克在爬坡或者翻车了。我截图算了,大概就是这样一个情况:
大概就是这样一个情况
其实我也很好想到问题的解决方式,就是世界坐标的改成局部坐标的就行了吧,结果出现了文章开头提到的BUG。
当时真的搞得我很难受,因为真找不出问题出在哪里,做了一晚上无用功。事实证明,遇到问题查不到的时候还是得找个正儿八经做出来了的项目来看一看。
当然了本来之前以为炮塔旋转已经做完了的。我都开始着手做开火了。效果也勉勉强强,用了rigidbody的炮弹,坦克多做了几个碰撞盒子,试着在Scene面板中用DrawLine把弹道标记了出来。也出了一些小BUG,比如我这个憨憨在FixedUpdate里面设置炮弹的速度,导致炮弹的速度一直不变,然后我在那里疑惑炮弹的轨迹怎么不下坠啊,为什么碰撞以后转圈圈啊。。。
当然,炮弹没有用对象池,对象池我已经忘了咋个做了,现学可能来不及,以后再补充算了。目前不用对象池估计对项目性能影响不大,炮弹毕竟也不多。应该不会经常出现GC;
除此之外,我做了一个在每次开火时坦克受到反作用力的效果,可能不太真实,但是也比没有好。
那么既然问题解决了,今天晚上剩下的时间我再优化一下炮管的旋转。

然后接下来的任务清单就是:

  • 瞄准系统。实在不行做个UI凑合一下
  • 炮弹的碰撞。简单点就碰着算随机数,复杂点就试试看能不能算角度,实在不行就做成碰到就炸的
  • 坦克爆炸效果
  • 敌人的AI,至少要会攻击玩家。能做出移动就再好不过了。
  • 弹道可视化(这个最后再说,大不了做成炮弹自发光材质)
  • 高速物体碰撞检测(用射线在每一帧检测一次算了)
  • 伤害算法,带随机数的(可能确实要参考一下FOW)
  • 碰撞角度(炮弹发射位置到敌人位置的向量来判断?貌似不行)
  • 敌人要怎么瞄准(还不知道,没做过)
  • 我们要怎么瞄准(大不了加个UI就完事了,打不着怪我咯)
  • 第一人称和第三人称的切换(多做几个摄像机来回切换?)
  • 怎么知道命中的是前装甲还是侧装甲还是后装甲(通过炮弹的朝向与对方的朝向来判断?不过貌似不是太行,干脆就别分前后装甲了)

猜你喜欢

转载自blog.csdn.net/qq_37856544/article/details/109826411