Unreal Engine C++委托绑定的两种方式与解耦方案咨询
Unreal Engine C++中委托绑定的耦合问题探讨
在研究耦合(Coupling)相关主题时,我对耦合程度的判定仍存在些许疑惑。以下以Unreal Engine C++中设置委托的两种方案为例进行说明:
示例一
在组件的入口点等待并获取其Owner,期望该Owner不为nullptr,随后绑定委托,若一切正常则顺利完成,若为nullptr则失败:
void UCustomCharacterMovementBase::BeginPlay() { Super::BeginPlay(); ACustomCharacter* CustomCharacter = GetOwner<ACustomCharacter>(); if (CustomCharacter == nullptr) return; CharacterReference = CustomCharacter; CustomCharacter->OnJumpKeyStateChanged.AddDynamic(this, &UCustomCharacterMovementBase::ToggleJump); }
这产生了强耦合!当前类依赖于特定的ACustomCharacter类,这种设计不合理。
示例二
void ACustomCharacter::BeginPlay() { Super::BeginPlay(); OnJumpKeyStateChanged.AddDynamic(CustomCharacterMovement, &UCustomCharacterMovementBase::ToggleJump); }
在Character的入口点完成所有委托绑定后,移动类不再依赖其他类,但ACustomCharacter类产生了对移动类的依赖,此外移动类的ToggleJump函数无法设为私有。
第二种方案看似更通用,因为Character类的所有初始化工作由其自身负责,但更换Character的移动组件时会引发问题,同样不合理。
我认为这两种方案均不正确,正确的做法应该是通过接口让各类自行实现逻辑。这种观点是否正确?或者我提出的这些方案都不可行?又或者在游戏引擎的场景下,过度追求解耦并无意义?
我曾尝试使用接口或全局委托,但仍无法摆脱类之间的相互依赖问题。
内容的提问来源于stack exchange,提问作者scydev
相关产品推荐
相关产品推荐

