【UE4】【C++】PlayerController、AIController获取玩家对应的Pawn
程序员文章站
2022-03-16 14:19:09
...
先创建一个基本的C++类(Tank),因为要对Tank进行各种操作(移动,寻找目标)所以选择了Pawn类型
PlayerController:
再创建一个C++类(TankPlayerController),用以控制玩家操作的对象(Tank)
创建好后在 .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<ATank>(GetPawn()); //将获得的pawn转换为tank
}
编译完后还要将蓝图里面的Tank的父类改成Tank
AIController:
.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