UE4一个PlayerController控制多个Actor的问题 - 纳金网
联系我们

给我们留言

联系我们

地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网

邮箱:info@narkii.com

电话:0595-82682267

(周一到周五, 周六周日休息)

当前位置:主页 > 3D教程 > 图文教程

UE4一个PlayerController控制多个Actor的问题

来源: 52vr | 责任编辑:传说的落叶 | 发布时间: 2019-06-06 08:20 | 浏览量:

[UE4]一个PlayerController控制多个Actor的问题

 

UE4中,一个PlayerController同时只能控制一个Actor,如果要实现RTS游戏中的那种多个Actor同时移动,需要Spawn出来多个Controller(PlayerController或者AIController等,具体看你需求),每个Controller去Possess一个Actor,然后通过控制这多个Controller来实现移动。

 

如何创建PlayerController,这个帖子讲了一种方式:
How do you place APlayerCharacter onto APlayerStart and take control?

https://forums.unrealengine.com/showthread.php?56494-How-do-you-place-APlayerCharacter-onto-APlayerStart-and-take-control

 
  1. In CreateLocalPlayer's case, the call chain you're looking for is:  
  2.   
  3. UGameInstance::CreateLocalPlayer  
  4. ULocalPlayer::SpawnPlayActor  
  5. UWorld::SpawnPlayActor  
  6. AGameMode::PostLogin  
  7. AGameMode::StartNewPlayer  
  8. AGameMode::RestartPlayer  
  9. AGameMode::GetDefaultPawnClassForController  

 相关代码:

 
  1. for( int32 a = 0; a < MaxPlayerCount; a++ )  
  2. {  
  3.     ULocalPlayer* localPlayer;  
  4.   
  5.     if( a == 0 )  
  6.     {  
  7.         localPlayer = gameInstance->GetFirstGamePlayer();  
  8.     }  
  9.     else  
  10.     {  
  11.         FString createLocalPlayerError;  
  12.         localPlayer = gameInstance->CreateLocalPlayer( a, createLocalPlayerError, true );  
  13.     }  
  14.   
  15.     FString url;  
  16.     FString spawnPlayActorError;  
  17.     localPlayer->SpawnPlayActor( url, spawnPlayActorError, currentWorld );  
  18.     FURL urlSpawn2;  
  19.     FString spawnError;  
  20.     PostLogin( localPlayer->PlayerController );  
  21.     currentWorld->SpawnPlayActor( localPlayer, ENetRole::ROLE_None, urlSpawn2, localPlayer->GetUniqueNetIdFromCachedControllerId(), spawnError );  
  22.     StartNewPlayer( localPlayer->PlayerController );  
  23.     RestartPlayer( localPlayer->PlayerController );  
  24.   
  25.     /*ABasePlayer* playerActor = ( ABasePlayer* )GetDefaultPawnClassForController( localPlayer->PlayerController ); 
  26.     ABasePlayerController* playerController = ( ABasePlayerController* )localPlayer->PlayerController; 
  27.     playerController->SetUpInput( playerActor, a );*/  
  28. }  

但是上面的RestartPlayer找不到相关文档,怎么使用不是很清楚,另外一个替代RestartPlayer的方式:

http://aigo.iteye.com/blog/2285835

 

 

ULocalPlayer

https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/ULocalPlayer/index.html

 

UWorld::SpawnPlayActor

https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/UWorld/SpawnPlayActor/index.html

 

可参考官方的塔防项目:

https://docs.unrealengine.com/latest/INT/Resources/SampleGames/StrategyGame/index.html

 

另外一片关于UE4中实现RTS类型游戏移动逻辑的文档(蓝图)

RTS Movement and Basic Behaviors on Unreal Engine 4

http://blog.meltinglogic.com/2015/04/unreal-rts-rpg-movement-behaviors/


相关文章
网友评论

您需要登录后才可以发帖 登录 | 立即注册

关闭

全部评论:0条

推荐
热门