与 Unreal engine 4 联网时相机出现问题
Problems with Camera in networking with Unreal engine 4
我目前正在做一个项目,我的所有玩家都使用不同的相机。
我一开始想到用UCameraComponent,但是每个camera都要绕着某个点转,不能随着pawn的移动而移动。
所以我决定在我的 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
}
}
这适用于第一个玩家,之后视情况而定。有时,第二个玩家得到一个工作正常的摄像头,但有时,他通过错误的摄像头查看,并且 Camera 变量与他正在查看的不同。有时,当新玩家加入游戏时,first/second 玩家看错镜头了。
这是我们用来在客户端和服务器(创建游戏的第一个客户端)之间建立 LAN 连接的 GameInstance 蓝图
如果有人能找到相机无法正常工作的原因,那就太好了!预先感谢大家的帮助。
看来你选错了方法
在 UE4 中 'ACharacter'(准确地说是 APawn
)是世界中的一种角色表现形式,因此每个玩家都会有一个。因此,将您的相机代码放入其中很奇怪。
您应该制作自己的控制器(例如 'AMyPlayerController')并从中控制相机。显然,只针对本地玩家。
我目前正在做一个项目,我的所有玩家都使用不同的相机。
我一开始想到用UCameraComponent,但是每个camera都要绕着某个点转,不能随着pawn的移动而移动。
所以我决定在我的 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
}
}
这适用于第一个玩家,之后视情况而定。有时,第二个玩家得到一个工作正常的摄像头,但有时,他通过错误的摄像头查看,并且 Camera 变量与他正在查看的不同。有时,当新玩家加入游戏时,first/second 玩家看错镜头了。
这是我们用来在客户端和服务器(创建游戏的第一个客户端)之间建立 LAN 连接的 GameInstance 蓝图
如果有人能找到相机无法正常工作的原因,那就太好了!预先感谢大家的帮助。
看来你选错了方法
在 UE4 中 'ACharacter'(准确地说是 APawn
)是世界中的一种角色表现形式,因此每个玩家都会有一个。因此,将您的相机代码放入其中很奇怪。
您应该制作自己的控制器(例如 'AMyPlayerController')并从中控制相机。显然,只针对本地玩家。