如何在 UE4 中正确设置 HUD 小部件

How to setup HUD widgets correctly in UE4

我正在关注 Udemy 上关于 Unreal Engine 基于游戏开发的教程。我也在 Udemy 上发布了 sam 问题。我会尽力解释我面临的问题。

什么有效

我设置了一个

我已将 FPS_GameMode 中的 HUD 设置为 FPS_HUD。 我已在项目设置中将 FPS_GameMode 指定为 GameMode。

现在我已经创建了 2 个蓝图 MainHUDUI_DynamicCrosshairUI_DynamicCrosshair 包含与角色移动时调整十字线大小相关的功能。 (如果角色在移动,它就会散开)。 我在 MainHUD 中使用了这个十字准线(在 MainHUD 的视口中使用了 UI_DynamicCrosshair)。 在我的 FPS_Character 蓝图中,我正在创建 MainHUD 小部件并将其添加到视口。

我玩游戏时会显示十字准线小部件,但当我的角色移动时它不会更新。

什么不起作用

我需要在 FPS_Character 中调用我的 UI_DynamicCrosshair 中定义的功能,以便在角色移动时触发它。 为此,我尝试使用 MainHUD 引用,因为它可以在 FPS_Character 蓝图中访问,假设我可以通过 MainHUD 引用访问 UI_DynamicCrosshair。但这不起作用。 UI_DynamicCrosshair 无法通过 MainHUD 引用访问。

你能分享一份 checklist/list-of-steps 以便我可以交叉检查我所做的一切并弄清楚我遗漏了什么吗?

如果您需要更多详细信息,请告诉我。

我假设它都在蓝图中,因为你没有提到任何 C++ 代码。

在我看来,您的 UI_DynamicCrosshair 实例只是设置为 private,因为您通常可以通过 MainHUD 引用访问它,如果它被设置为 public。 当您选择了 UI_DynamicCrosshair 变量时,确保 this checkbox 在您的 MainHUD class 中 未选中

不过,更好(或更好)的方法是创建一个 public 函数,比方说 SetCharacterMovement(Boolean bIsMoving),在你的 MainHUD,并在其中实现调整大小的逻辑。

然后,当您需要更新十字准线时,您可以 在您的 MainHUD 引用上 FPS_Character 调用此函数 。这样你的 PlayerCharacter 就不必知道你的 HUD 的内部逻辑,它会自行处理(及其 'children')。

这是一个叫做 Separation of concerns 的原则,它将帮助您以简洁的方式设计事物。