首先放个视频来展示一下《星之海的阿斯特莉娅》最新的开发进度吧:加入了防空系统,可以拦截敌人的导弹
[[https://www.bilibili.com/video/BV1i541167BY/]](假装这里有视频,b站换成bv号了,这里好像还不支持)
然后来说说我在游戏中是如何实现子弹的碰撞检测吧。这部分其实是很早以前就写好的系统,只不过最近调试又发现了bug,而且这个bug的原因我实在是不吐不快。
首先要在Unity里实现子弹的碰撞检测,最直接的方法当然就是使用碰撞体了。但是这样也有一些可能缺点,比如弹速太快的话可能会穿墙啊,刚体数量太多消耗性能啊,处理不好Layer和是否Trigger的选取导致子弹发射时跟玩家的单位发生碰撞产生奇怪的物理效果等等。我希望子弹尽量简单一些,只检测碰撞,不需要物理效果,于是选择了Raycast的方法。然后在搜索Unity手册的过程中发现了这个:
RaycastCommand
一看描述:schedule一批射线检测,并行执行。这不是太好了吗,Unity性能瓶颈就在于单线程,而这个功能能把射线检测放到多线程去执行,那肯定有益于提升性能啊,那就用吧。
写一个BulletManager类,其中每帧更新时执行如下代码:bullets.RemoveAll((x) => (x == null || x.destroyed));//先清理一下子弹数组,把已经不存在的子弹去掉
//把每个子弹的RaycastCommand放进一个数组
var results1 = new NativeArray(bullets.Count, Allocator.TempJob);
var commands1 = new NativeArray(bullets.Count, Allocator.TempJob);
for(int i = 0; i < bullets.Count; i++)
{
commands1[i] = bullets[i].getRaycastCommand()

本文讲述了在Unity中使用RaycastCommand实现子弹碰撞检测遇到的问题,即批处理的射线检测只能检测一次碰撞。开发者通过调整代码,记录友军碰撞距离来解决光束穿透敌人未检测到的bug。此外,还分享了制作防空炮效果的小技巧,利用光束和Shader模拟快速且断续的子弹效果。
最低0.47元/天 解锁文章
745

被折叠的 条评论
为什么被折叠?



