考虑优化性能,对ROLE_AutonomousProxy客户端,通过PrimaryComponentTick.bRunOnAnyThread,开启了UCharacterMovementComponent::TickComponent多线程,注意到UCharacterMovementComponent::PerformMovement里有一些对
UObject对象的写操作,还有CurrentRootMotion.CleanUpInvalidRootMotion,CurrentRootMotion.Clear等操作,在线程安全性问题上需要注意些什么,有没有什么规范来保证线程安全?
TonyChen1
(TonyChen1)
2
你好,在UE5中尝试将UCharacterMovementComponent设为多线程执行需要非常慎重。确实有人通过源码修改和严格控制实现了CMC的多线程使得Game Thread负载显著降低。但这些成果伴随着对引擎源码的修改和对使用方式的诸多约束。
感兴趣可以参考这篇文章。同时在这篇文章中对于在线程安全性问题上需要注意些什么,有没有什么规范来保证线程安全在这篇文章里已经介绍比较完整我就不赘述了,我想说的是对于移动组件往往会牵连Network,Animation,RootMotion,Physics,Navigation等多个模块,要实现多线程需要改动引擎的相关联的一系列代码,如果想使用多线程的移动模式我会建议考虑使用下一代的移动组件mover
感谢解答!看来就是得自己去改造了,为了各部分的线程安全考虑。正式项目就不考虑尚在实验状态的Mover了