我正在从我编写的外部应用程序发送命令。此外部应用程序通过UDP将键盘上按下的键发送到UE4。
当UE4获取消息(按下的键,例如:'w
')时,我想让角色向前走(只有1个字符)。
while (true)
{
int32 bytes_read = 0;
if (Socket->Recv(data, sizeof(data), bytes_read)){
data[bytes_read] = 0;
//Should I use this, instead of SetActorLocation?
APlayerController* playerController = World->GetFirstPlayerController();
ACharacter* myCharacter = UGameplayStatics::GetPlayerCharacter(World, 0);
FVector characterLocation = myCharacter->GetActorLocation();
FVector newCharacterLocation = characterLocation + FVector(10, 0, 0);
//This just moves the character, but does not walk and no collision is included
myCharacter->SetActorLocation(newCharacterLocation);
//FPlatformProcess::Sleep(0.1);
}
}
注意:循环正在另一个线程上执行
SetActorLocation()
对我来说不起作用,因为它会移动角色,但实际上只是“传送”。我想指示角色移动,好像我正在玩游戏并以正常方式控制角色。
我想通过外部应用程序控制角色。我应该怎样做才能使角色移动,就像我自己玩游戏并按下,例如:'w
',向前移动?
答案 0 :(得分:0)
我明白了......
while (true)
{
int32 bytes_read = 0;
if (Socket->Recv(data, sizeof(data), bytes_read)){
data[bytes_read] = 0;
ACharacter* myCharacter = UGameplayStatics::GetPlayerCharacter(World, 0);
myCharacter->AddMovementInput(FVector(10, 0, 0), 5.0);
}
}