TMap型の変数を保持し、getterとsetterを提供するクラスがあります。
それをキャラクタに持たせ、Tick関数でGetterを呼び出し続けていると
Assertion failed: Pair != nullptr [File:C:\Epic Games\4.14\Engine\Source\Runtime\Core\Public\Containers\Map.h] [Line: 522]
が表示され、エディタがクラッシュしてしまうのですが何か原因や解決法をご存じの方はいらっしゃいますでしょうか?
以下ソースコードです。
MyCharacter.h
#pragma once
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"
UCLASS()
class ASSERTIONTEST_API AMyCharacter : public ACharacter
{
GENERATED_BODY()
private:
class UWorldState* MyState;
public:
// Sets default values for this character's properties
AMyCharacter();
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
MyCharacter.cpp
#include "AssertionTest.h"
#include "MyCharacter.h"
#include "WorldState.h"
#include "Engine.h"
// Sets default values
AMyCharacter::AMyCharacter()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
MyState = NewObject<UWorldState>();
MyState->SetVariable( FString( "TEST" ), true );
}
// Called every frame
void AMyCharacter::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
if ( MyState->GetVariable( FString( "TEST" ) ) )
{
GEngine->AddOnScreenDebugMessage( -1, 5.f, FColor::Cyan, TEXT( "COMPLETE TASKS" ) );
}
}
// Called to bind functionality to input
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}
WorldState.h
#pragma once
#include "UObject/NoExportTypes.h"
#include "WorldState.generated.h"
/**
*
*/
UCLASS()
class ASSERTIONTEST_API UWorldState : public UObject
{
GENERATED_BODY()
private:
TMap<FString, bool> StateMap;
public:
void SetVariable( FString key, bool value );
bool GetVariable( FString key );
};
WorldState.cpp
#include "AssertionTest.h"
#include "WorldState.h"
void UWorldState::SetVariable( FString key, bool value )
{
StateMap.Add( key, value );
}
bool UWorldState::GetVariable( FString key )
{
return StateMap[key];
}