【问题标题】:Member Valiable losing value on Tick (c++)成员变量在 Tick (c++) 上失去价值
【发布时间】:2020-07-18 01:15:02
【问题描述】:

我目前在尝试使用 tick 来决定是否应该根据成员变量布尔值做某事时遇到问题。

目前,我的 Player Character 类上有一个 BindAction,当按下给定键时,将我的成员变量 bTriggerPulled 的值设置为 True:

void AShooterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
 {
     Super::SetupPlayerInputComponent(PlayerInputComponent);
     PlayerInputComponent->BindAction("HandleTrigger", IE_Pressed, this, &AShooterCharacter::PullTrigger);
 }
 
 void AShooterCharacter::PullTrigger()
 {
     if(GEngine != nullptr)
     {
         GEngine->AddOnScreenDebugMessage(1, 2.f, FColor::Yellow, TEXT("Trigger is pressed"));
     }
 
     bTriggerPulled = true;
 }

在我的 Tick() 函数中,我正在检查 bTriggerPulled 以决定是否将某些内容打印到控制台日志:

void AShooterCharacter::Tick(float DeltaTime)
 {
     Super::Tick(DeltaTime);
     
     if(bTriggerPulled)
     {
         UE_LOG(LogTemp, Warning, TEXT("Trigger"));    
     }
 }

问题在于,当调用 Tick() 时,bTriggerPulled 变量总是被设置回 false。我没有为该值被覆盖的地方提供资金,并且在检查该值以搜索其所有用途时,仅显示这两个地方。

我已经删除了 /Saved 和 /Binaries 和 /Intermediate 文件夹以生成新的解决方案,但它并没有解决我的问题。

我已经检查了成员变量的所有用法,但它没有在任何地方设置为 false。

【问题讨论】:

  • 您没有显示声明和定义 bTriggerPulled 变量的确切方式和位置,但从您显示的屏幕截图来看,似乎 bTriggerPulled 未初始化。检查未初始化的变量,如AShooterCharacter::Tick(),是未定义的行为。

标签: c++ unreal-engine4


【解决方案1】:

所以,我发现了问题所在,这是一个愚蠢的问题,但无论如何我都会放下我的骄傲并在这里分享。

我的班级AShooterCharacter 继承了一个蓝图,并且该蓝图在我的关卡(敌人)上放置了 N 次。当我调试时,我的 IDE 不一定与该特定类的实例不同。因为只有AShoterCharacter(我的玩家角色)的一个特定实例负责更改bTriggerPulled 的值,所以当我调试Tick() 时,会显示来自我的类​​的另一个实例的值。

是的,有点傻:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2015-08-05
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多