PUN2の整理 - 1 初期設定からPrefabの召喚まで

久しぶりの投稿になります。今回は最近よく開発で触る「Photon Unity Network」について勉強したことをまとめたいと思います。

Photonについては上のHPを見ればだいたいなにができるかはわかると思います。




「PUNのはじめかた」


非常に簡単でした。

1, Photonアカウントを作成する


2, サインインし、新しくアプリを作成する

「新しくアプリを作成する」ボタンがあるのでそこをクリック。

Photonの種類:Photon Realtime

アプリケーション名:作成するアプリの名前を入力(自分があとからみてどのアプリに使っているかがわかればなんでも大丈夫)

アプリケーションの説明:なんでもOK

URL:いれなくても大丈夫

そしたら「作成する」ボタンを押して作成。


3, アプリケーションIDを取得する

アプリケーションID :と書いてあるところの横に表示されている文字列をクリックするとIDが表示されるのでコピーしておきましょう。


4, Unity Asset StoreからPUNをダウンロード

FREE版と有料版がありますが、今回はFREE版で。FREE版は20人まで同時接続できます。


5, 先ほどコピーしたIDをUnityの方に登録

上のウィンドウが出てくると思うので「AppId or Email」にペーストし、Setup Project。

もしウィンドウが出なかった時は Alt + P を押すとPhotonの設定ウィンドウ(PUN Wizard)がでてくるのでSetup Projectを押すと同じウィンドウがでてくる。

これにてセットアップ完了〜!


その他設定

必須ではありませんが他にも設定項目があります。

App Id Chat : ボイスチャットを実装するときに入力します。


App Version : 適当な文字列を入力します(例 : 1.0)。ここのゲームバージョンが異なる文字列をもつクライアントを隔離することができる。


Fixed Region : リージョンを固定します。デフォルトでは Best Region SelectionはONになっており、PUNがベストリージョンを選択しますが、ここにリージョンコードを入力することによって Best Region Selection がOFFになり自分で選択したリージョンになります。

Enable Support Logger : 接続やマッチメイキング中、ルームの中で発生した問題をログとして出力してくれます。


※その他の設定は今回使わなかったのでまたわかったら付け加えます。





「サーバー接続とルームへの参加/作成」


Unityで新しいシーンを作成し、保存してください。Create Emptyで新しいオブジェクトを作成し、そのオブジェクトに今回は例として LoginManager という名前のコンポーネントを作成し付与しました。 

LoginManagerに以下を記述しました。


PhotonNetwork.ConnectUsingSettings();

この関数を呼ぶと直ちにエディタで設定したようにPhotonに接続します。(PhotonServerSettingsファイルに保存されます)

特に設定しないと、PhotonNetwork.ConnectToMaster() を呼びます。


public override void OnConnectedToMaster() {  }

今回特に設定をしていないので、Photonマスターサーバーへ接続されます。この関数は無事にマスターサーバーに接続ができたときに呼ばれます。


PhotonNetwork.JoinOrCreateRoom("name", new RoomOptions(), TypedLobby.Default);

”name” で指定した文字列の部屋があればその部屋に参加し、その名前のルームがない場合は自分でその名前の部屋を作って参加します。

RoomOptionsクラスを使って部屋に諸々設定ができます。設定できる各項目に関してはドキュメントを参照。

Photon Unity Networking: RoomOptions Class Reference

ルームを作成するときに必要な共通ルームのプロパティをまとめます。詳細については、個々のエントリを読んでください。 More...ルームを作成するときに必要な共通ルームのプロパティをまとめます。詳細については、個々のエントリを読んでください。これはRoomクラスのフィールドに直接マップされます。設定するルームのカスタムプロパティ。文字列キーを使用してください!カスタムルームのプロパティは、ゲームの設定を定義するために必要なキー値です。 キーは短いほど良い。 例:Map、Mode(Mapで使用する場合は「m」でも良い)、TileSet(「t」でもよい)。 ロビーにリストされるカスタムルームのプロパティを定義します。ロビーにリストされるカスタムルームのプロパティを定義します。 注意して使用してください。マッチメイキングやユーザ情報にカスタムプロパティが不可欠な場合を除き、 ロビー内のクライアントにトラフィックや遅延が発生するためロビーには送信すべきではありません。デフォルト:カスタムプロパティはロビーに送信されません。 最後のプレーヤーが離れるときのルームの生存時間(TTL)。すぐに再参加した場合に備えて、メモリ内にスペースを確保します。ミリ秒単位。いつでもルームにいることができるプレーヤーの最大数。0は無制限を意味します。ルームの「アクター」の生存時間(TTL)。クライアントが切断されると、このアクターは最初に非アクティブになり、このタイムアウトの後に削除されます。ミリ秒単位。サーバに予想されるプラグイン設定を通知します。エラーコードPluginMismatch 32757(0x7FFF - 10)を返すプラグインミスマッチの場合、オペレーションは失敗します。 string[]{}を設定すると、クライアントはプラグインの設定を期待しません。 注意:下位互換性のために、nullは如何なるチェックを省略します。 ユーザが退室したときにルームからユーザのイベントとプロパティを削除します。これは、プレイヤーがルームにアイテムを置くことができず、完全に消えてしまうルームでは理にかなっています。 これを無効にすると、ルームが無期限に使用されていると、イベント履歴の読み込みに時間がかかりすぎます。 デフォルト:true。退室するユーザのキャッシュとプロパティを消去します。 任意で

doc-api.photonengine.com

TypedLobbyは調べたけどよくわからなかったです....


public override void OnJoinedRoom() {  }

ルームに参加した時に呼ばれます。ここでプレイヤーを召喚します。


PhotonNetwork.Instantiate("MyPrefabName", new Vector3(0, 0, 0), Quaternion.identity, 0);

Prefabをゲーム中にインスタンス化します。注意点として、召喚するPrefabはResourcesフォルダの直下に入っている必要があります。またUnityのInstantiateとは違い、第1引数が string なことにも気をつけてください。




プレイヤーの作成


基本的になんでもいいですが、今回はこんなプレイヤーを作ってみました。

このキャラクターをPhotonネットワーク上に出すには、まず PhotonViewコンポーネント を付与します。そしてこのオブジェクトをプレハブ化し、Resourcesフォルダにいれます。

PhotonViewコンポーネントは同期をしたいオブジェクトには必ずつけると覚えておきましょう!


LoginManagerのPlayer変数にこのプレハブをいれて再生してみると...

シーンにPlayerプレハブが配置されました〜!


次回は位置を同期していきます。

Debug.Log("自分の成長記録板");

Debug.Log("自分と同じようにプログラミング始めたばかりの方や、自分のブログに興味をもっていただけた方、ぜひコメントなどよろしくお願いします");

0コメント

  • 1000 / 1000