C++ 摄像头与虚幻引擎4联网时出现问题

C++ 摄像头与虚幻引擎4联网时出现问题,c++,networking,unreal-engine4,unreal-blueprint,C++,Networking,Unreal Engine4,Unreal Blueprint,我目前正在做一个项目,我的所有玩家都使用不同的相机 我首先想到的是使用UCameraComponent,但每个摄像头都必须绕着某个点旋转,而不是随着爪子的移动而移动 所以我决定在我的棋子的BeginPlay()中产生一个摄影演员 void AMyCharacter::BeginPlay() { Super::BeginPlay(); if (!hasCamera) { // Camera not set yet FVector vectpos; // Target position of

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

我首先想到的是使用UCameraComponent,但每个摄像头都必须绕着某个点旋转,而不是随着爪子的移动而移动

所以我决定在我的棋子的BeginPlay()中产生一个摄影演员

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 
}
}
void字符::BeginPlay()
{
Super::BeginPlay();
如果(!hasCamera){//尚未设置摄像头
FVector vectpos;//摄像机的目标位置
vectpos.X=-1130;
向量Y=10;
向量Z=565;
转子旋转;
旋转。螺距=-22;
旋转。偏航=0;
旋转。滚动=0;
APlayerController*controller=Cast


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

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

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


您应该制作自己的控制器(例如“AMyPlayerController”)并从中控制摄像机。显然,仅适用于本地播放器。

网络服务器有所有播放器控制器,您总是使用最后一个。尝试使用
UEngine::GetFirstLocalPlayerController
感谢您的回复,我尝试了这个,它适用于服务器,但一旦我连接到第二个播放器,我的服务器就会丢失他的摄像机。当我连接时使用第三个播放器时,每个人都会丢失相机。可能是因为客户端和服务器上正在调用BeginPlay,而服务器将相机变量的值更改为错误的值?是否有方法获取我们正在查看的当前相机?
BeginPlay
将在服务器上为每个播放器调用。首先t-
aPan
具有函数
GetController
。因此您不需要在任何地方查找它。其次,
AController
具有
IsLocalController
,因此您可以找出它是本地还是网络播放器控制器。我已经尝试过这些,
GetController()
只适用于服务器,每个调用它的客户端都会得到一个空值,而不是他的控制器。我尝试寻找本地控制器,但更糟糕的是,我检查了所有的控制器,得到了一个本地控制器,然后生成了一个摄像头,但最后,我所有的客户端都没有摄像头。我想你做错了。
ACharacter
是世界上的一种角色表示法,因此每个玩家都有一个。因此,将相机代码放在其中是很奇怪的。在我看来,你应该制作
AMyPlayerController
并从中控制相机。显然,这只适用于本地玩家。