Re: [请益] 请问Ball Pit的弹珠是如何实现?

楼主: dklassic (DK)   2026-02-04 17:15:18
※ 引述《MasterDoggo (狗狗我的朋友)》之铭言:
: 近期刚好有写projectile的经验
: 然后玩到Ball Pit看到那么多弹珠实在很好奇实现方式
: 不知道会是直接用rigidbody省时间
: 还是自己手刻射线检查?
: 通常情况第一直觉是想到rigidbody
: 但看到满屏弹珠,总有点怀疑rigidbody的效能是否足够
: 请问各位经验丰富的大大,认为是用什么方式实现的呢?
: https://i.meee.com.tw/OZPqf62.png
: https://i.meee.com.tw/p5auXa3.png
没玩过 Ball X Pit,但单纯看画面的话有点随便的分析:
https://youtu.be/L_w0AJSYXJo?list=PLlIK6xp5WIRcj312uD1Pf__lTag7cq8uf
以 Unity Rigidbody 来说数量级没有超过 1000 的话,其实就连 Steam Deck 的 CPU 都
可以轻易跑在 90FPS 以上。从 Ball X Pit 的画面看起来虽然很花,但是动态的物理性物
件满少的,挑了几个后期画面看起来都远低于 100 颗子弹,要用 Rigidbody 实作应该是
挺绰绰有余。
不过实务上 Ball X Pit 的单一子弹体积很小,移动速度不算太慢,为了避免判定穿透应
该是有做 Raycast,加上因为玩家子弹移动速度比其他物件都快很多,如果说子弹本体完
全没有使用 Collider/Rigidbody 而是全部都靠 Raycast 向前判断碰撞也不无可能,破绽
应该会挺小。但是体积比较大的特殊子弹只用单一 Raycast 的话玩家可能会对擦弹没命中
感到不满,当然也是可以对单一子弹打超过一条 Raycast 处理。
Unity 也有能力使用多执行绪做大量 Raycast 判定:
https://docs.unity3d.com/ScriptReference/RaycastCommand.html
不过如果同一个 Frame 内就要取得结果的话,可能不一定可以省到效能,甚至可能会比直
接打普通的 raycast 慢。
总之:都可以,纯 Rigidbody 或纯 Raycast 感觉都很可行,这个数量级其实不太有效能
问题。

Links booklink

Contact Us: admin [ a t ] ucptt.com