不明不惑
不明不惑
发布于 2025-08-05 / 5 阅读
0

Mover 共享设置

本文转载自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();
}