#c #unreal-engine4
#c #unreal-engineer4
Вопрос:
Я пытаюсь создать поведение конечного автомата, и, похоже, я не могу разобраться с UE4s c . Здесь я инициализирую свои состояния и устанавливаю его в SMB
ATryEM::ATryEM()
{
PrimaryActorTick.bCanEverTick = true;
MyStateMachineBehaviour = NewObject<UMyStateMachineBehaviour>();
testState = NewObject<UMyState>();
otherState = NewObject<UMyState>();
if(ensure(testState))
MyStateMachineBehaviour->Init(testState);
}
// Called when the game starts or when spawned
void ATryEM::BeginPlay()
{
Super::BeginPlay();
ChangeState();
}
void ATryEM::ChangeState()
{
if (ensure(otherState))
MyStateMachineBehaviour->ChangeState(otherState);
}
Вот как выглядит мой SMB
#include "MyStateMachineBehaviour.h"
UMyStateMachineBehaviour::UMyStateMachineBehaviour()
{
CurrentState = nullptr;
}
void UMyStateMachineBehaviour::Init(UMyState* initState)
{
if(initState)
{
CurrentState = initState;
CurrentState->Enter_State();
}
}
void UMyStateMachineBehaviour::ChangeState(UMyState* newState)
{
CurrentState->Exit_State();
if (newState)
{
CurrentState = newState;
CurrentState->Enter_State();
}
}
void UMyStateMachineBehaviour::UpdateState()
{
if(CurrentState)
CurrentState->Exit_State();
}
и состояния просто имеют инструкцию debug.
Комментарии:
1. Вы создаете объекты без каких-либо внешних элементов, скорее всего, они собираются как мусор.
2. внешний в смысле? Не могли бы вы уточнить? @Rotem
3. Попробуй
NewObject<UMyState>(this);
. Дайте ему что-то вроде родителя, который владеет им, чтобы он не получил GC’ed.