Unity Multiplayerゲーム

    第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!

    次回、もっとゲーム開発について、話したいです。

    よろしくお願いいたします。