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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

Avatar for MIXI ENGINEERS

MIXI ENGINEERS PRO

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の方が向いている – リバーシや将棋などで駒を打つときなど