第3グループのTayPVSです。
ゲームが好きですので、今日ゲーム開発について話させていただきます。
簡単なMultiplayerゲームの開発のし方を紹介します。
1. 準備一覧:
Unity3DとPhotonNetworkを使います。
・Unity3D
・PhotonEngine Account
・PhotonNetwork Library (PUN2)
2. プロジェクトを設定:
PhotonEngine Accountアカウント登録するのが必要です。
無料アカウントは20CCU(Concurrent Users)つまり、同期にオンラインユーザーが20人ほど設定できます!
登録のURLは以下です。
https://id.photonengine.com/en-US/Account/SignUp
後、PhotoNetworkライブラリーが使えるために、Photonプロジェクトを作成しましょう。
プロジェクトを作成した後で、AppIDをもらいます。
次は、UnityAsset StoreでPUNServerライブラリーをダウンロードして、使います。
そのために、UnityAsset StoreでPUN2を探して、PUN2のパッケージをダウンロードします。
ダウンロードが完了したら、AppIDを入力するところが表示されて、そのところに先のもらったAppIDを入力しましょう。
MultiplaterCallbackと関数とかが使えるようになるために、MonoBehaviorの代わりに、MonoBehaviourPunCallbacksを使います。
3. 次、必要な行動を以下の順番の通りにやります。
・ローディングSceneでサーバーに接続する
・ルームを作成・ルームに参加
・Playerをスポーン(Spawn Player)
・Enemyをスポーン(Spawn Enemy)
3.1 ローディングSceneでサーバーに接続する
サーバーに接続するために、ローディングSceneのStart関数で以下のコードを使います。
PhotonNetwork.ConnectUsingSettings();
サーバーに接続成功したら、
OnConnectedToMaster()
が実行されます。
その場所で、次のSceenに移動します。
3.2 ルームを作成・ルームに参加 (Join.Create Room)
他のPlayerと一緒にプレイのために、ルームに参加するのが必要です。
一人のPlayerがルームを開いて、他のPlayerがそのルームに参加すると、一緒にプレイできるようになります。
PhotonNetwork.CreateRoom(RoomName, RoomOptions);
RoomOptionsdですが、この場合MaxPlayer=2にします。
ルームに参加関数が2つの関数を使います。
・PhotonNetwork.JoinRoom(RoomName)
・OnJoinedRoom()
を使います。
PhotonNetwork.JoinRoomを実行したら、OnJoinedRoomというCallback関数が自動に実行されます。
以下はUnityで作成した簡単なUIですね。
3.3 最後、PlayerとEnemyをスポーン(Spawn)しましょう。
・Playerをスポーン(Spawn Player)
・Enemyをスポーン(Spawn Enemy)
PhotonNetwork.Instantiate(player/enemy, transform, rotation);
PhotonNetwork.Instantiateを実行したら、初期されるObjectがPhotonViewに紐つけられて、自分側のObjectがMultiplayerネットワックで作成されて、他のユーザーに自分のユーザーのデータを送ります。
それで、他のユーザーは自分側のObjectが見えます。
しかし、注意することはこの関数で Enemyをスポーンしたら、ルームを作成したユーザー側で実行した方がいいということです。
そうしないと、EnemyがDuplicateされます。そうするために、PhotonNetwork.IsMasterClient関数を使います。
以下のUpdate関数の通りにしましょう。
今まで、Multiplayerネットワック構築のための必要な関数を書いて、Multiplayerのルームを作成できました!!
4. RPCFunctionとPhotonView
お互いにPlayer行動を同期するために、ちょっとRPCFunctionとPhotonViewについて、話します。
(Remote Procedure Call)RPCFunctionとPhotonViewはMultiplayerネットワックでデータを同期つまり、一人のデバイスのデータから、他のPlayerでのネットワックに同じにするし、全部のネットワックに参加しているデバイスの同じPRC関数を呼ぶのです。
そうするために、PhotonViewComponentをObjectに紐つけるし、 networkView.RPC() を呼ぶことが必要です。
networkView.RPC()のパラメーターは関数名とTargetOptionです。
TargetOption :
・ All: 全部のPlayerに送信する
・Other: 自分の以外、他のPlayerに送信する
・Server: Hostのみに送信する
ここまで、簡単なMulteplayerゲームが作成できますよ。
Enjoy and Have fun!
次回、もっとゲーム開発について、話したいです。
よろしくお願いいたします。