チュートリアルを見ながら、ネットワークゲームにおいて最初のカードをどの様に配ったらよいかを考えます。
下記のチュートリアルではFPSゲームのプレイヤーの初期配置の仕方を説明しています。
プレイヤーを配置する代わりに予め決められた場所にカードを配置してみようと思います。
NetworkManagerに下記のスクリプトを加える事によって上記の動画ではランダムなspawnpointにプレイヤーを初期配置しています。
(プレイヤーの代わりにCARDをInstantiateしようとしています)
void OnJoinedRoom() { StartSpawnProcess(0f); } void StartSpawnProcess (float respawnTime) { StartCoroutine("SpawnPlayer", respawnTime); } IEnumerator SpawnPlayer(float respawnTime) { yield return new WaitForSeconds(respawnTime); int index = Random.Range(0, spawnPoints.Length); player = PhotonNetwork.Instantiate("Card", spawnPoints[index].position, spawnPoints[index].rotation, 0); }
しかし、ランダムに配置では場所が被る場合がありますので、ランダムにする必要は無く、一人目はどちらかに入って、二人目はそれ以外の所に入るというようなスクリプトが、カードゲームの場合は望ましいという事になります。
よってプレイヤーの数が1人の場合、一個目のspawnpointsにカードが配られ、それ以外の時に、二つ目のspawnpointsにカードが配られるというスクリプトで良い気がします。
void OnJoinedRoom() { if (PhotonNetwork.playerList.Length == 1) { int index = 0; PhotonNetwork.Instantiate("Card", spawnPoints[index].position, spawnPoints[index].rotation, 0); } else { int index = 1; PhotonNetwork.Instantiate("Card", spawnPoints[index].position, spawnPoints[index].rotation, 0); } }
上のように書き換えてみました。下の画像の黒いキューブがspawnpointsです。NetworkManagerにインスペクター上でドラッグアンドドロップしてあります。
(それからInstantiateするカードも同じくドラッグアンドドロップしています。)
ここで注意するのは、InstatntiateするカードはPhotonUnityNetworking下のResourseフォルダにPrefab化して入れておかなければなりません。
それから、お互いのカードが双方のプレイヤー画面で見えるためにはPhotonViewというスクリプトをPrefabにアタッチする必要があります。
ファイルをビルドしてビルドしたファイルと、ユニティ本体で実行しているファイルの両方の挙動を確認し、ネットワークが上手く繋がっているかどうかを確認します。
ちょっと場所がずれていますが、お互いのカードが見えている事が分かります。これで、ネットワーク上で双方のプレイヤーにカードを一枚裏返しにした状態で配ることが出来ました。
もしよろしければ、Photonについて私が知りえる限りの情報を徹底的にまとめてみたので、下記の記事も読んで下さいね!