【问题标题】:Problems with Camera in networking with Unreal engine 4与虚幻引擎 4 联网时相机的问题
【发布时间】:2017-04-19 01:49:36
【问题描述】:

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

我一开始想用UCameraComponent,但是每个相机都必须绕着某个点转动,而不是随着pawns的移动而移动。

所以我决定在我的 pawn 的 BeginPlay() 中生成一个相机 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 蓝图

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

【问题讨论】:

  • 网络服务器有所有的播放器控制器,你总是拿最后一个。尝试使用UEngine::GetFirstLocalPlayerController
  • 感谢您的回复,我试过了,它适用于服务器,但是当我与第二个玩家连接时,我的服务器失去了他的相机。当我与第三位玩家联系时,每个人都会失去他的相机。可能是因为正在客户端和服务器上调用 BeginPlay,而服务器将 Camera 变量的值更改为错误的变量?有没有办法让我们通过它查看当前的相机?
  • BeginPlay 将在服务器上为每个玩家调用。起初 - APawn 具有功能 GetController。所以你不需要在某个地方寻找它。其次,AControllerIsLocalController,所以你可以找出是本地还是网络播放器控制器。
  • 我已经尝试过这些,GetController() 仅适用于服务器,每个调用它的客户端都会得到一个 NULL 而不是他的控制器,我试图寻找本地控制器,但更糟糕的是,我是检查所有控制器并获取本地控制器,然后生成一个摄像头,但最后,我所有的客户都没有摄像头。
  • 我认为你做错了。 ACharacter 是世界上的一种角色表示,因此您将为每个玩家拥有一个。因此,将您的相机代码放入其中很奇怪。 IMO,您应该制作AMyPlayerController 并从中控制相机。显然,仅适用于本地玩家。

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


【解决方案1】:

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

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

您应该制作自己的控制器(例如“AMyPlayerController”)并通过它控制相机。显然,仅限本地玩家。

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2015-09-24
    • 2023-03-20
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2020-07-24
    相关资源
    最近更新 更多