本文转载自Yuewu(罗传月武)发布的文章,如有侵权,请联系我删除
介绍
Mover是模块化,且数据驱动的。每一种运动模式可以包含仅用于该模式的相关设置,并存在于运动模式实例本身。
但通常情况下,多个运动模式之间也会共享一些设置。
本节内容主要讨论运动模式和共享设置之间的关系,以及共享设置的创建和使用原则。
配置共享设置
每一个运动模式可以在其SharedSettingsClasses
字段上指定它所需的共享设置类型,当你编辑完MovementModes
后,MoverComponent
上的SharedSettings
数组会根据MovementModes
的配置自动刷新。
如果SharedSettingsClasses
存在某一类设置没有被任何运动模式所使用,那么它会自动从数组当中移除。
你可以查看UMoverComponent::RefreshSharedSettings()
了解具体逻辑。
使用共享设置
每一个运动模式都可以实现OnRegisterd和OnUnregisterd,并在这个时候通过MoverComponent拿到对应的共享设置并缓存起来,以供在该模式下的其他逻辑中使用。
TObjectPtr<const UCommonLegacyMovementSettings> CommonLegacySettings;
void UWalkingMode::OnRegistered(const FName ModeName)
{
Super::OnRegistered(ModeName);
CommonLegacySettings = GetMoverComponent()->FindSharedSettings<UCommonLegacyMovementSettings>();
ensureMsgf(CommonLegacySettings, TEXT("Failed to find instance of CommonLegacyMovementSettings on %s. Movement may not function properly."), *GetPathNameSafe(this));
}
void UWalkingMode::OnUnregistered()
{
CommonLegacySettings = nullptr;
Super::OnUnregistered();
}