使用虚幻引擎4进行网络联机时出现问题

时间:2017-04-19 01:49:36

标签: c++ networking unreal-engine4 unreal-blueprint

我目前正在开展一个所有玩家使用不同相机的项目。

我首先想到的是使用UCameraComponent,但是每个相机都必须转动某个点而不随着棋子的移动而移动。

所以我决定在我的pawn的BeginPlay()中生成一个Camera Actor。

void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
if (!hasCamera) { // Camera not set yet
    FVector vectpos; // Target position of the camera
    vectpos.X = -1130;
    vectpos.Y = 10;
    vectpos.Z = 565;
    FRotator rotation;
    rotation.Pitch = -22;
    rotation.Yaw = 0;
    rotation.Roll = 0;


    APlayerController* controller = Cast<APlayerController>(GetController());

    if (controller == NULL) // When I'm on client, the GetController() return NULL.
    {
    // Trying to find the controller of my client
        for (FConstPlayerControllerIterator Iterator = GetWorld()->GetPlayerControllerIterator(); Iterator; ++Iterator)
        {
            controller = *Iterator;
            //On client, there is only 1 controller according to the documentation.
        }
    }

    if (controller != NULL)
    {
        controller->SetViewTarget(Camera); // Set the view with the new camera
    }
    SetCamera(true); // Call and RPC Function to update the hasCamera variable 
}
}

这适用于第一个玩家,之后依赖。有时,第二个玩家得到一个工作正常的相机,但有时,他正在通过错误的相机观看,而且相机变量与他正在观察的相同。有时,当新玩家加入游戏时,它会成为第一个/ /第二个玩家正在通过错误的相机看。

以下是我们用来使客户端和服务器(创建游戏的第一个客户端)之间的LAN连接的GameInstance蓝图 GameInstance Blueprint

如果有人能找到相机无法正常工作的原因,那就太棒了!提前感谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

显然,你选择了错误的方式。

在UE4&#39; ACharacter&#39; (确切地说APawn)是世界上的角色表示,因此每个玩家都有一个角色代表。因此,将相机代码放入其中是很奇怪的。

您应该制作自己的控制器(例如,&#39; AMyPlayerController&#39;)并从中控制相机。显然,只适用于本地玩家。