物理引擎是游戏引擎中一个非常重要的基础模块,也是一个非常有趣的模块。虽然现在商用的物理引擎已经很多了,而且都非常成熟,但是引擎毕竟不是万能的,有些特殊场合还是需要自己去实现。比如:
- 要实现一个小游戏,使用很简单的碰撞检测就够了,引入庞大的物理引擎,效率反而低而且不够灵活;
- 要实现一些超自然场景。比如宇宙类宏观题材,或是量子等微观题材,本来常规的物理定律就不适用,更别说是基于常规物理定律实现的物理引擎了;
- 运动的物体数量太多的游戏,比如弹幕类游戏。这种情况下,物理引擎可能就是瓶颈之一了,也许我们要的仅仅是碰撞检测,而不是物理模拟。那么自己实现碰撞检测,就再合适不过了。
- 帧同步类游戏。这类游戏要保证数据一致性,物理引擎肯定要自己开发了;
- ECS架构。基于预测+回滚的同步模型,比如守望先锋。物理和碰撞数据肯定也要跟着一起回滚;
- 服务器碰撞检测。服务器使用物理引擎的开销太高了,迫不得已要用的情况下需要定制;
- 最关键的是,你确定你的游戏用的是碰撞引擎而不是物理引擎?
就拿Unity引擎来说,一个RigidBody,剩下大部分都是静态的Collider,在低端手机上,这居然都能成为性能瓶颈,WTF!Character Controller能轻松的爬山(RigidBody就更不用说了),我提bug了,然后官方回复我说这个组件要废弃了,不建议使用,然后他们继续官宣:“我们有Character Contraller,能够很方便的实现人物的物理逻辑”。