Предположим, я хочу создать класс AI в коде, который будет использоваться для управления пешкой, но я хочу, чтобы мои дизайнеры могли изменять поведение, используя чертежи для быстрых итераций.
Предположим, у меня есть это в MyProjectBaseAI.h :
#pragma once
#include "EngineMinimal.h"
#include "GameFramework/Actor.h"
#include "MyProjectBaseAI.generated.h"
UCLASS()
class MYPROJECT_API AMyProjectBaseAI : AActor
{
GENERATED_BODY()
public:
AMyProjectBaseAI(const FObjectInitializer& ObjectInitializer);
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
void SetGoalPosition(FVector pos);
virtual void DetermineGoalPosition(int32 stateData1, int32 stateData2) = 0;
private:
FVector goalPosition;
};
Я хотел бы сделать этот класс абстрактным и иметь план, способный реализовать DetermineGoalPosition(...);
для вызова SetGoalPosition(FVector pos)
в зависимости от их дизайна ИИ.
Тогда, как дизайнеры могут установить реализующий класс в инспекторе, чтобы мой код C ++ мог его создать? Предположим, я использую AMyProjectBaseAI ai = World->SpawnActor<AMyProjectBaseAI>(...);