物理性能
Q1:UWA的报告中指出我们所使用的刚体超出了限制,我们经过测试发现只要使用CharacterController就会产生一个隐藏的刚体。而我们的角色移动是会使用CharacterController的。 为了避免这种情况,我们使用了CapsuleCollider来替代CharacterController接受点击,同时使用设置位置的方法来替代CharacterController的move。
1. 请问这样做是否有风险,并且是否可以降低我们在刚体和物理系统方面的开销呢?
2. 同期我们观测到了一个以前没有关注过的警告。其内容为:
Static Collider.Move (Expensive Delayed cost),请问该报错是否与我们的调整相关?能够导致该警告的原因可能会有哪些呢?
- 多数情况下,RigidBody + CapsuleCollider 与 CharacterController 相比会高效一些,因为 move 函数本身会进行较复杂的模拟运算;
- Static Collider.Move (Expensive Delayed cost) 意味着场景中有静态碰撞体(不带有RigidBody的Collider)发生了移动,而该操作在Unity 4.x版本的PhysX 中会在后续的模拟中产生较高的开销,但在 5.x 中理论上开销并不明显。如果要消除该问题,只需定位到发生位移的Collider并挂上RigidBody 组件,打开其is kinematic 选项即可。
物理性能
Q2:有时候在Profiler中会碰到Static Collider.Move(Expensive delay cost),有什么办法可以优化掉呢?
一般情况下,尽可能避免在Unity Profiler中出现 Static Collider.Move(Expensive delayed cost)字样。这种字符的出现很可能会导致后续的物理更新出现较大的性能开销,具体体现在Physics.Simulate中。出现这种情况主要是受限于Unity 4.x版本中的PhysX 2.x在移动静态碰撞体是开销较高的问题。因此,我们建议给需要移动的静态Collider加上RigidBody并勾选is Kinematic复选框,从而将其变为动态碰撞体。进行此操作后,该字样将会随之消失。