距离上次写东西大概有差不多半年多了,一直没有时间写(这篇文章已经在草稿箱半个月了,主要还是自己懒 。。。),今天刚好有点空闲时间,加上最近一段时间踩了 LevelStreaming 的坑,所以打算总结一下自己之前搞的一套大世界场景下动态物体的管理方式,顺带过一下动态物体的同步方式。
游戏中的动态物体
游戏中一般会有各种各样可见的Object,比如墙、石头、载具、路牌等等。
- 从游戏玩法角度来看,这些物体可以分为可交互的和不可交互的,比如在绝地求生游戏中,可以与玩家驾驶的载具进行碰撞的木栅栏、玩家死亡后留下的盒子等等。
- 从游戏表现的角度来看,可以分为需要同步的和不需要同步的,例如绝地求生中的木栅栏,它本身和游戏玩法无关,不同客户端上可以允许存在不同的表现,你的小伙伴开车撞烂了一个木栅栏,你的机器上这个木栅栏是否被撞坏完全不重要。
动态物体的同步方式
1.同步输入
UE4中刚体的碰撞一般走PhysX流程,可以通过NotifyHit事件捕捉到碰撞信息(例如法线、碰撞点、冲量等),若想在PhysX底层进行碰撞的处理,比如修改弹性系数、物理材质、甚至是过滤碰撞等,需要使用PhysX的contactModifier接口,这里就不详细讨论了。为了减小模拟物理带来的开销,也可以通过施加Impulse的方式来模拟碰撞。
同步输入指的是每次物体受到玩家或者其他物体的输入,比如位移,碰撞等。DS(Dedicated Server) 需要下发该消息到每个客户端,其他客户端再进行表现,碰撞判定可以在DS上进行也可以下放到Local Client。同步输入有一个优点就是流量比较小&#x