Unreal Engine:敵キャラを作成する

とりあえず攻撃対象が存在しないことにはゲームとして成り立たないので、敵を作ることにします。使用する敵アセットは、Maximoからダウンロードしてくるか、マーケットプレースで無料アセットをゲットするかして用意します。今回は、マーケットプレースで無料で入手できるParagonシリーズのMurdochを使用します。

スポンサーリンク

Enemyクラスを作成する

親クラスにCharacterを選択してEnemyという新しいクラスを作成します。

MyProject.Build.csにNavigationSystemとAIModuleを追加します。

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG", "PhysicsCore", "NavigationSystem", "AIModule" });

Enemy.hのprivateセクションに変数を宣言します。

UPROPERTY(EditAnywhere, Category = AI, meta = (AllowPrivateAccess = "true"))	
class UBehaviorTree* BehaviorTree;

publicセクションにgetterを宣言します。

RCEINLINE UBehaviorTree* GetBehaviorTree() const {return BehaviorTree;}

コンパイルしてUE4エディタを起動します。

スポンサーリンク

Enemyブループリントの作成

Enemyクラスに基づくブループリントを新規作成します。フォルダはEnemiesを選択、名前はEnemy_BPにします。

スケルタルメッシュにMurdochを選択します。

Anim ClassにMurdochのブループリントを選択します。

スポンサーリンク

AIControllerクラスの作成

AIControllerを親クラスにC++クラスを新たに作成します。ファイル名はここではEnemyControllerにしています。

EnemyController.hに関数と変数を宣言します。

public:
	AEnemyController();
	virtual void OnPossess(APawn* InPawn) override;
private:
	UPROPERTY(BlueprintReadWrite, Category = AI, meta = (AllowPrivateAccess = "true"))
	class UBlackboardComponent* BlackboardComponent;

	UPROPERTY(BlueprintReadWrite, Category = AI, meta = (AllowPrivateAccess = "true"))
	class UBehaviorTreeComponent* BehaviorTreeComponent;

public:
	FORCEINLINE UBlackboardComponent* GetBlackboardComponent() const {return BlackboardComponent;}

EnemyController.cppにコードを記述します。

#include "EnemyController.h"
#include "Enemy.h"
#include "BehaviorTree/BehaviorTree.h"
#include "BehaviorTree/BehaviorTreeComponent.h"
#include "BehaviorTree/BlackboardComponent.h"

AEnemyController::AEnemyController()
{
	BlackboardComponent = CreateDefaultSubobject<UBlackboardComponent>(TEXT("BlackboardComponent"));
	check(BlackboardComponent);

	BehaviorTreeComponent = CreateDefaultSubobject<UBehaviorTreeComponent>(TEXT("BehaviorTreeComponent"));
	check(BehaviorTreeComponent);
}

void AEnemyController::OnPossess(APawn* InPawn)
{
	Super::OnPossess(InPawn);

	if (InPawn == nullptr) return;
	AEnemy* Enemy = Cast<AEnemy>(InPawn);
	if (Enemy)
	{
		if (Enemy->GetBehaviorTree())
		{
			BlackboardComponent->InitializeBlackboard(*(Enemy->GetBehaviorTree()->BlackboardAsset));
		}
	}
}
スポンサーリンク

EnemyのAI構築

EnemyControllerクラスをベースにブループリントを新規に作成します。

AIのブラックボードを新規に作成します。

AIのビヘイビアツリーを新規に作成します。

Enemy_BPを開き検索窓にbeと入力、Behavior Treeに先程作成したビヘイビアツリーを選択してコンパイルと保存を押します。


これで敵の作成は完了です。後は、敵がAIで動くように設定していくだけです。

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました