0

我正在关注基于虚幻引擎的游戏开发的 Udemy 教程。我也在 Udemy 上发布了同样的问题。我会尽力解释我面临的问题。

什么有效

我已经建立了一个

  • 游戏模式名为FPS_GameMode,
  • 游戏实例名为FPS_GameInstance,
  • HUD 命名FPS_HUD

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

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

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

什么不起作用

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

您能否分享一份清单/步骤清单,以便我可以交叉检查我所做的一切并找出我错过了什么?

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

4

1 回答 1

1

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

在我看来,您的UI_DynamicCrosshair实例只是设置为privateMainHUD ,因为如果它设置为public,您通常可以通过引用访问它。当您的变量被选中时,请确保在您的类中未选中此复选框。MainHUDUI_DynamicCrosshair

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

然后,您可以在需要更新十字准线时根据您的参考调用此函数。这样一来,您的 PlayerCharacter 就不必了解 HUD 的内部逻辑,它会照顾自己(及其“孩子”)。MainHUDFPS_Character

这是一个称为关注点分离的原则,它将帮助您以干净的方式设计事物。

于 2020-08-17T18:03:25.267 回答