Как сравнить переменную из одного класса в другом в 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;
};