从其他文件调用函数 - 在 Unreal Engine 上找不到标识符?
Call function from other file - identifier not found on Unreal Engine?
我已经 class 使用 .cpp 和 .h 文件命名了 HealthComponent 和 GamemodeBase。在 GamemodeBase 头文件中,我声明了无效函数 HealthBar(float fHealth)。我想在 HealtComponent 实现文件中调用它,但我收到 indentifier not found 错误。我包括 GamemodeBase.h 所以我认为这应该有效。
GameModeBase.h
public:
UFUNCTION(BlueprintImplementableEvent)
void HealthBar(float nHealth);
HealthComponent.cpp
#include "Game/MyGameModeBase.h"
...
if(PlayerGetDamage())
HealthBar(fHealth);
您需要将 HealthBar 设为静态函数并使用 GameModeBase::HealthBar() 调用它,或者在 HealthComponent 中创建一个 GameModeBase 对象并使用 object.HealthBar()
调用它
您需要对 GameMode 的引用才能对其调用非静态函数。
如果 HealthComponent 附加到 GameMode,您可以简单地将 HealthComponent 的所有者转换为 GameMode。
AMyGameModeBase* GameMode = Cast<AMyGameModeBase>(GetOwner());
GameMode->HealthBar(fHealth);
或者您可以通过世界访问游戏模式。
AMyGameModeBase* GameMode = GetWorld()->GetAuthGameMode<AMyGameModeBase>();
GameMode->HealthBar(fHealth);
我推荐第二种方法,因为它更通用。
另外请注意,对于多人游戏,客户端不存在 GameMode。 GameMode 只存在于服务器上。
我已经 class 使用 .cpp 和 .h 文件命名了 HealthComponent 和 GamemodeBase。在 GamemodeBase 头文件中,我声明了无效函数 HealthBar(float fHealth)。我想在 HealtComponent 实现文件中调用它,但我收到 indentifier not found 错误。我包括 GamemodeBase.h 所以我认为这应该有效。
GameModeBase.h
public:
UFUNCTION(BlueprintImplementableEvent)
void HealthBar(float nHealth);
HealthComponent.cpp
#include "Game/MyGameModeBase.h"
...
if(PlayerGetDamage())
HealthBar(fHealth);
您需要将 HealthBar 设为静态函数并使用 GameModeBase::HealthBar() 调用它,或者在 HealthComponent 中创建一个 GameModeBase 对象并使用 object.HealthBar()
调用它您需要对 GameMode 的引用才能对其调用非静态函数。
如果 HealthComponent 附加到 GameMode,您可以简单地将 HealthComponent 的所有者转换为 GameMode。
AMyGameModeBase* GameMode = Cast<AMyGameModeBase>(GetOwner());
GameMode->HealthBar(fHealth);
或者您可以通过世界访问游戏模式。
AMyGameModeBase* GameMode = GetWorld()->GetAuthGameMode<AMyGameModeBase>();
GameMode->HealthBar(fHealth);
我推荐第二种方法,因为它更通用。
另外请注意,对于多人游戏,客户端不存在 GameMode。 GameMode 只存在于服务器上。