2017-04-19 5 views
0

私は現在、すべてのプレイヤーが異なるカメラを使用するプロジェクトに取り組んでいます。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の青写真である

誰かが期待通りにカメラが動作しない理由を見つけることができればGameInstance Blueprint、それは非常にいいだろう!あなたのお手伝いをしてくれてありがとう。

+0

ネットワークサーバーにはすべてのプレーヤーコントローラーがあります。常に最後のプレーヤーコントローラーを使用します。 'UEngine :: GetFirstLocalPlayerController'を使用してください。 –

+0

返事ありがとう、私はこれを試してみましたが、サーバで動作しますが、すぐにセカンドプレーヤーと接続すると、サーバはカメラを失います。 3人目のプレイヤーと接続すると、誰もがカメラを失います。 BeginPlayがクライアントとサーバーで呼び出され、サーバーが間違ったCamera変数の値を変更することが原因である可能性がありますか?私たちが見ている現在のカメラを手に入れる方法はありますか? – Matriac

+0

'BeginPlay'はすべてのプレーヤーのためにサーバー上で呼び出されます。最初は 'APawn'は' GetController'関数を持っています。だからあなたはどこかでそれを探す必要はありません。次に、 'AController'は' IsLocalController'を持っていますので、あなたはそれがローカルかネットワークプレーヤーのコントローラーかを知ることができます。 –

答えて

0

間違った方法を選択してください。

UE4では、「ACharacter」(正確にはAPawn)は、世界各国の文字表記であるため、すべてのシングルプレイヤーに1つずつ表示されます。したがって、あなたのカメラコードを入れておくのは奇妙です。

独自のコントローラ(たとえば、 'AMyPlayerController')を作成し、そこからカメラを制御する必要があります。明らかに、ローカルプレイヤーのためだけです。

関連する問題