- LayeredMove产生的速度会合并到FMoverDefaultSyncState::Velocity里,从而影响到下一帧的MovementMode::OnGenerateMove产生的速度。举个例子,如果角色当前是WalkMovementMode,同时有个LayeredMove播放RootMotion,那么即便玩家没有任何输入,WalkMovementMode也会产生额外的速度(因为他拿上一帧的总速度减去摩擦力减速得到这帧的新速度),就意味着角色的RootMotion会有额外的位移。在CharacterMovementComponent里,有一个FRootMotionSourceGroup::LastPreAdditiveVelocity的变量专门把RMS产生的额外速度给减去。你们能把这个功能加入到Mover里来吗?
- 没有接口能让外界系统主动Cancel掉LayeredMove(我们很需要),而MovementModifier却有专门的Handle和CancelModifierFromHandle。
- FLayeredMoveGroup::Operator==里会深拷贝LayeredMove的Instance,这意味着外界系统无法缓存LayeredMove的实例并直接修改其中的变量。这是设计如此吗?我们目前只能把需要的数据缓存在外部系统,并在FLayeredMoveBase::GenerateMove里读取外部数据并更新。
- 接问题3,即便我们是UMoverStandaloneLiaisonComponent来驱动Mover(我们暂时不需要网络同步),每帧也会进行很多的数据结构拷贝,可以考虑对Standalone优化一下吗
- AMoverExamplesCharacter是从APawn继承出来的,这是官方推荐的做法吗?因为Pawn并没有默认添加Capsule和SkeletalMesh以及相关接口,所以我们更想让角色类型从ACharacter继承出来,但是ACharacter强制带了CMC。
- 考虑兼容一些旧的接口比如APawn::GetVelocity,这些接口目前无法对Mover生效。我们需要一个个找出来并Override,如果官方能兼容是最好。
您好,感谢反馈,看上去是mover在使用时遇到的问题,根据描述我的理解LayeredMove的实例可能在设计时候并没有考虑到会被外部缓存的情况,同时mover和cmc的一个不同之处在于希望mover可以支持更多形状而不仅仅是胶囊体的actor去移动,后面也会提供更多不同形状的actor进行移动的示例,所以不再是带有cmc的character类型,其他的我这边会反馈给开发团队看看在后面的版本中是否会加入。
感谢。因为我们是从CMC转到Mover的,所以沿用ACharacter是最方便的。
明白您的意思,后面也计划会提供cmc转mover的方式,不过目前还未开始这块的开发,目前的精力还在对animation的支持上