C++ 摄像头与虚幻引擎4联网时出现问题
我目前正在做一个项目,我的所有玩家都使用不同的相机 我首先想到的是使用UCameraComponent,但每个摄像头都必须绕着某个点旋转,而不是随着爪子的移动而移动 所以我决定在我的棋子的BeginPlay()中产生一个摄影演员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
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
并从中控制相机。显然,这只适用于本地玩家。