Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゲーム開発研修(Photon編)【ミクシィ22新卒技術研修】

 ゲーム開発研修(Photon編)【ミクシィ22新卒技術研修】

MIXI ENGINEERS

April 25, 2022
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Programming

Transcript

  1. マルチプレイ実現技術 ▪ Photon Engine ▪ Monobit Engine ▪ MLAPI ▪

    Unity NetCode ▪ gRPC, WebSocket, MagicOnion, ... ▪ ちなみにモンストは… – TURN (RFC5766) をリレーサーバとするHost/Guestクライアント型の構造
  2. マルチプレイ実現技術 ▪ Photon Engine ▪ Monobit Engine ▪ MLAPI ▪

    Unity NetCode ▪ gRPC, WebSocket, MagicOnion, ... ▪ ちなみにモンストは… – TURN (RFC5766) をリレーサーバとするHost/Guestクライアント型の構造 今回の研修ではこちらを扱います
  3. [準備] Photon AppID の設定 ▪ メニュー [Window]>[Photon Unity Networking]>[Highlight Server

    Settings] を選択 – または Assets/Photon/PhotonUnityNetworking/Resources/PhotonServerSettings アセットを選択 ▪ App Id PUN に配布された Photon App Id を入力 – 新卒以外の方はご自身でPhotonアカウントを作成(無料)し、AppIDを取得してください – https://doc.photonengine.com/ja-jp/realtime/current/getting-started/obtain-your-app-id
  4. Photonサーバの構成 ▪ マッチメイキングを行う Master Server – ルーム一覧取得や条件マッチング、Game Server へのルーティング ▪

    実際にクライアント間でやり取りする Game Server – 情報の保持と通信の中継、カスタムゲームロジック Master Server Lobby Game Server Game Server Game Server Room Room Room
  5. ビルド・実行方法 ▪ メニュー [ビルド]>[PhotonTutorialをビルドして実行] を選択 ▪ メニュー [ビルド]>[ビルドフォルダを開く] を選択するとビルド成果物のフォルダを開きます ▪

    mac でアプリケーションを複数起動したい場合、ターミナル上で以下のコマンドを実行します – ビルドしたアプリケーションとUnityエディタ間でも通信に支障ありません open -n RingCrisis/Builds/PhotonTutorial/PhotonTutorial.app
  6. [PT0] クリック座標を送信するRPCの作成 ▪ 左クリックの検知 – Input.GetMouseButtonDown(0) – 座標の取得は Input.mousePosition プロパティ

    – Update メソッドの中でチェックしよう ▪ RPCの作成 – Vector3 の引数をもつメソッドを定義 – PunRPC 属性をつける – サンプルのように送信者のニックネームなどを追加してもよい ▪ RPCの送信 – サンプルと同様に _photonView.RPC を使う ▪ 接続状態、ルーム入室状態をチェックする – PhotonNetwork.InRoom を条件に加えよう
  7. [PT0] クリック座標を送信するRPCの作成 [PunRPC] private void NotifyClick(string sender, Vector3 position) {

    AppendLog($"{sender}> {position}"); } private void Update() { if (PhotonNetwork.InRoom && Input.GetMouseButtonDown(0)) { var sender = PhotonNetwork.NickName; var position = Input.mousePosition; _photonView.RPC("NotifyClick", RpcTarget.AllViaServer, sender, position); } }
  8. [PT1] クリックした位置にマーカーを表示 ▪ PT0の内容を拡張し、受け取った座標にマーカー画像を表示してみましょう – Canvas の下にマーカー用の Image を作成 –

    PhotonTutorial からマーカー用オブジェクトの Transform を参照 – マーカー用オブジェクトの Transform の position を受け取った座標で更新 ▪ マーカー画像は Assets/PhotonTutorial/Sprites/cursor を使ってください
  9. PhotonViewについて ▪ ネットワーク越しにオブジェクトを同期するための基本的なコンポーネント – https://doc.photonengine.com/ja-jp/pun/v1/getting-started/feature-overview#00g284n2rn1tuqq6 ▪ RPC以外にも、オブジェクトの状態を監視して自動的に同期する仕組みなど、あまりコードを書か なくても動く便利な仕組みもあります – Observed

    Components とある部分 – OnPhotonSerializeView といったメソッドでシリアライズだけ定義すればよい ▪ オブジェクトの状態ではなくイベント系の通知などはRPCの方が向いている – リバーシや将棋などで駒を打つときなど