当前位置:   article > 正文

unity 射线检测真机失效_用Unity的RaycastCommand实现子弹的碰撞检测碰到的大坑

unity 多线程射线检测

首先放个视频来展示一下《星之海的阿斯特莉娅》最新的开发进度吧:加入了防空系统,可以拦截敌人的导弹

[[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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号