とりあえず攻撃対象が存在しないことにはゲームとして成り立たないので、敵を作ることにします。使用する敵アセットは、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で動くように設定していくだけです。











コメント