【UE4】【C++】PlayerController、AIController获取玩家对应的Pawn

先创建一个基本的C++类(Tank),因为要对Tank进行各种操作(移动,寻找目标)所以选择了Pawn类型

【UE4】【C++】PlayerController、AIController获取玩家对应的Pawn_第1张图片

PlayerController:

再创建一个C++类(TankPlayerController),用以控制玩家操作的对象(Tank)

【UE4】【C++】PlayerController、AIController获取玩家对应的Pawn_第2张图片

创建好后在   .h文件内写声明    .cpp文件内写具体的函数

由于我们要获取玩家对应的pawn(Tank),则是从游戏开始就开始获取,固需要重写BeginPlay()的方法

h:

cpp:

void ATankPlayerController::BeginPlay() {
	Super::BeginPlay();        //执行BeginPlay我们不需知道的部分

	ATank* ControlledTank = GetControlledTank();
	if (ControlledTank == nullptr) {        //用于检查是否获得到玩家控制的对象(Tank)
		UE_LOG(LogTemp, Warning, TEXT("ERROR:Controlled Tank IS NULL"));
	}
	else {
		UE_LOG(LogTemp, Warning, TEXT("Controlled Tank IS %s"),*ControlledTank->GetName());    
	}
}
ATank * ATankPlayerController::GetControlledTank() {
	
	
	return Cast(GetPawn());		//将获得的pawn转换为tank
}

编译完后还要将蓝图里面的Tank的父类改成Tank


AIController:

【UE4】【C++】PlayerController、AIController获取玩家对应的Pawn_第3张图片


.h:

public:
	
	ATank* GetControlledTank();

	ATank* GetPlayerTank();

.cpp:

ATank* ATankAIController::GetControlledTank() {
	return Cast(GetPawn());
}

ATank * ATankAIController::GetPlayerTank()
{
	ATank* PlayerTank=Cast(GetWorld()->GetFirstPlayerController()->GetPawn());
	if(PlayerTank==nullptr)return nullptr;
	else return PlayerTank;
}

由AIController获取玩家的角色(Pawn(Tank)),是从GetWorld()找起(Engine/World.h),再用GetFirstPlayerController()来获取玩家(所谓的FirstPlayer)的Controller,由Controller获取Pawn

完了还要在蓝图里设置Tank的AIController

你可能感兴趣的:(UE4,C++)