欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-16 14:19:09
...

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

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

PlayerController:

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

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

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

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

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

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<ATank>(GetPawn());		//将获得的pawn转换为tank
}

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


AIController:

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


.h:

public:
	
	ATank* GetControlledTank();

	ATank* GetPlayerTank();

.cpp:

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

ATank * ATankAIController::GetPlayerTank()
{
	ATank* PlayerTank=Cast<ATank>(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

相关标签: Controller