如何在 UE4 中正确设置 HUD 小部件
How to setup HUD widgets correctly in UE4
我正在关注 Udemy 上关于 Unreal Engine 基于游戏开发的教程。我也在 Udemy 上发布了 sam 问题。我会尽力解释我面临的问题。
什么有效
我设置了一个
- 名为
FPS_GameMode
、 的游戏模式
- 名为
FPS_GameInstance
、 的游戏实例
- 名为
FPS_HUD
的 HUD
我已将 FPS_GameMode
中的 HUD 设置为 FPS_HUD
。
我已在项目设置中将 FPS_GameMode
指定为 GameMode。
现在我已经创建了 2 个蓝图 MainHUD
和 UI_DynamicCrosshair
。 UI_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 的原则,它将帮助您以简洁的方式设计事物。
我正在关注 Udemy 上关于 Unreal Engine 基于游戏开发的教程。我也在 Udemy 上发布了 sam 问题。我会尽力解释我面临的问题。
什么有效
我设置了一个
- 名为
FPS_GameMode
、 的游戏模式
- 名为
FPS_GameInstance
、 的游戏实例
- 名为
FPS_HUD
的 HUD
我已将 FPS_GameMode
中的 HUD 设置为 FPS_HUD
。
我已在项目设置中将 FPS_GameMode
指定为 GameMode。
现在我已经创建了 2 个蓝图 MainHUD
和 UI_DynamicCrosshair
。 UI_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 的原则,它将帮助您以简洁的方式设计事物。