Unity内置的光线检测功能很棒 - 直到你需要它外部。当你想要在独立服务器上、在头部模拟中或在共享客户端/服务器游戏逻辑中进行碰撞检测时,Physics.Raycast就不再存在了。
所以我自己编写了一个不依赖于Unity的光线检测系统。整个引擎是一个纯C#核心 -盒子/球体/胶囊碰撞器与一个QuadTree - 在Unity和普通.NET中都能运行,客户端和服务器共享相同的碰撞代码,而不是两个不一致的物理路径。
在Unity中它是一个可直接使用的插件:
>if (CustomRaycastSystem.Instance.Raycast(ray, out CustomHitInfo hit, 100f))
>Debug.Log($"Hit {hit.HitGameObject.name} at {hit.Distance:0.0}m");
同样的核心,零Unity引用,在你的服务器上运行。
数字(无头部捆绑,.NET 8 Release,20k rays/batch - 由硬件决定):
- 100 个碰撞器:~1.19M rays/s
- 10,000 个碰撞器:~58k rays/s
- 0 B GC 在稳态下每个光线检测都没有GC,RaycastAll是可预测的(按照距离,然后ID排序)
MIT许可证,带有一个无头部xUnit测试套件(差异化与暴力枚举oracle,零分配断言)。很希望能得到关于API和加速结构的反馈。
评论 (0)