私は現在、すべてのプレイヤーが異なるカメラを使用するプロジェクトに取り組んでいます。Unrealエンジン4とネットワーク接続する際のカメラの問題
Iは、第UCameraComponentを使用して思ったが、各カメラは、ポーンの移動に伴って移動する特定の点の周りに回すとしないしなければなりません。
私は私のポーンの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
}
}
これは最初のプレイヤーで動作しています。場合によっては、2人目のプレーヤーがうまく動作するカメラを取得することもありますが、間違ったカメラを見ていることがあり、カメラ変数が探しているものと異なる場合があります。新しいプレーヤーがゲームに参加すると、 /間違ったカメラを見ているセカンドプレーヤー。
は、ここでは、クライアントbewteen LAN接続とサーバ(ゲームを作成するための最初のクライアント)を行うために使用GameInstanceの青写真である
誰かが期待通りにカメラが動作しない理由を見つけることができれば、それは非常にいいだろう!あなたのお手伝いをしてくれてありがとう。
ネットワークサーバーにはすべてのプレーヤーコントローラーがあります。常に最後のプレーヤーコントローラーを使用します。 'UEngine :: GetFirstLocalPlayerController'を使用してください。 –
返事ありがとう、私はこれを試してみましたが、サーバで動作しますが、すぐにセカンドプレーヤーと接続すると、サーバはカメラを失います。 3人目のプレイヤーと接続すると、誰もがカメラを失います。 BeginPlayがクライアントとサーバーで呼び出され、サーバーが間違ったCamera変数の値を変更することが原因である可能性がありますか?私たちが見ている現在のカメラを手に入れる方法はありますか? – Matriac
'BeginPlay'はすべてのプレーヤーのためにサーバー上で呼び出されます。最初は 'APawn'は' GetController'関数を持っています。だからあなたはどこかでそれを探す必要はありません。次に、 'AController'は' IsLocalController'を持っていますので、あなたはそれがローカルかネットワークプレーヤーのコントローラーかを知ることができます。 –