Как сравнить переменную из одного класса в другом в unreal engine 4 и c++

Такая проблема, нужно реализовать открытие двери с помощью ключа. Для этого я решил сделать так: в c++ классе игрока CharacterScript, при подборе ключа, переменная takedGoldKey становится true, в c++ классе двери DoorForGoldKey я использую Cast to и обращаюсь к takedGoldKey. Проблемы начинаются, когда я хочу узнать true эта переменная или false. Если при написании кода Visual Studio не ругается на ошибки, то UE4 вылетает при запуске самой игры. Сразу говорю я новичок и в c++ и в UE4, поэтому, если не сложно, объясните пожалуйста простым языком. Заранее спасибо.

Вот код DoorForGoldKey.cpp:

#include "DoorForGoldKeyScript.h"
#include "Components/SceneComponent.h"
#include "Components/StaticMeshComponent.h"
#include "Templates/Casts.h"
#include "Engine/Engine.h"
#include "Kismet/GameplayStatics.h"


ADoorForGoldKeyScript::ADoorForGoldKeyScript()
{
    PrimaryActorTick.bCanEverTick = true;

    emptyObject = CreateDefaultSubobject<USceneComponent>(TEXT("EmptyObject"));
    emptyObject->SetupAttachment(RootComponent);

    pivotDoor = CreateDefaultSubobject<USceneComponent>(TEXT("PivotDoor"));
    pivotDoor->SetupAttachment(emptyObject);
    
}

void ADoorForGoldKeyScript::BeginPlay()
{
    Super::BeginPlay();

    FOnTimelineFloat doorOpeningAnimationUpdate;
    doorOpeningAnimationUpdate.BindUFunction(this, FName("doorOpeningAnimationUpdate"));
    doorOpeningAnimation.AddInterpFloat(curveDoorOpeningAnimation, doorOpeningAnimationUpdate);
    
}

void ADoorForGoldKeyScript::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    doorOpeningAnimation.TickTimeline(DeltaTime);

    if (Cast<ACharacterScript>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)))
    {
        GEngine->AddOnScreenDebugMessage(2, 9.0f, FColor::Blue, "Cast is work ");
        CharacterScript->takedGoldKey;
        if (&CharacterScript->takedGoldKey)
        {
            GEngine->AddOnScreenDebugMessage(-1, 9.0f, FColor::Blue, "Variable is work");
            doorOpeningAnimation.Play();
        }
    }
    else
    {
        GEngine->AddOnScreenDebugMessage(2, 9.0f, FColor::Red, "Cast do not work");
    }
}

void ADoorForGoldKeyScript::doorOpeningAnimationUpdate(float Alpha)
{
    float RotationDoorInAnimation = FMath::Lerp(0.0f, 90.0f, Alpha);
    pivotDoor->SetRelativeRotation(FRotator(0.0f, RotationDoorInAnimation, 0.0f));
}

Вот код DoorForGoldKey.h:

#pragma once

#include "CoreMinimal.h"
#include "CharacterScript.h"
#include "GameFramework/Actor.h"
#include "Components/TimelineComponent.h"
#include "DoorForGoldKeyScript.generated.h"

UCLASS()
class GRANNYLIKEGAME_API ADoorForGoldKeyScript : public AActor
{
    GENERATED_BODY()
    
public: 
    ADoorForGoldKeyScript();

    virtual void Tick(float DeltaTime) override;

    UFUNCTION()
        void doorOpeningAnimationUpdate(float Alpha);


    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        class USceneComponent* pivotDoor;
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        class UCurveFloat* curveDoorOpeningAnimation;
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        class USceneComponent* emptyObject;


    FTimeline doorOpeningAnimation;

    bool GoldKeyT;
    class AActor* actorCharacterCast;
    class ACharacterScript* CharacterScript;

protected:
    virtual void BeginPlay() override;

};

Ответы (0 шт):