Slide 1

Slide 1 text

PUN2をasync/awaitで使える ライブラリつくってみた 「Pun2Task」 2020/12/06 とりすーぷ

Slide 2

Slide 2 text

自己紹介 •とりすーぷ • VR系の開発してる • Microsoft MVP • (Developer Technologies) • 最近はVRChatしてます illustrations by kota(@kt_kkz)さん

Slide 3

Slide 3 text

「Pun2Task」 •Photon Unity Networking2の拡張ライブラリ • https://github.com/TORISOUP/Pun2Task • めんどくさいログイン周りの処理をasync/awaitで 扱えるようにしたライブラリ

Slide 4

Slide 4 text

PUNとは •Photon Cloud • リアルタイムなネットワーク通信機能を実装するときに よく用いられるサービス • ゲームジャムで利用されることも多い • これのUnity向け公式ライブラリが 「Photon Unity Networking (PUN)」

Slide 5

Slide 5 text

PUN と PUN2の違い •現行バージョンはPUN2 •PUNとの違いは • 基本的に使い方は同じ • 微妙にAPIが変わった • イベント呼び出しのインタフェースが定義された

Slide 6

Slide 6 text

Pun2Task •PUN2向けのライブラリ • PUN1と互換性はないです

Slide 7

Slide 7 text

PUNで同等のことがしたいなら •「PhotonRx」というライブラリを昔作った • https://github.com/TORISOUP/PhotonRx • Rxベースなので使い勝手は悪い • 今から触るなら「PUN2 + Pun2Task」でいいと思う

Slide 8

Slide 8 text

PUN,PUN2の弱点

Slide 9

Slide 9 text

PUN,PUN2の弱点 •「コールバックイベント」が使いにくい

Slide 10

Slide 10 text

例:ログイン

Slide 11

Slide 11 text

例:ログイン このAPIの結果がこれ このAPIの結果がこれ

Slide 12

Slide 12 text

使いにくい理由 •APIとイベントの対応がわからん • どのAPIとイベントが対応するのか覚えないとだめ • 別のAPIなのに同じイベントが飛んでくる • 異常系は別のイベントが飛ぶ •「どのAPIを呼んだのか」という文脈が 失われてしまう

Slide 13

Slide 13 text

Pun2Taskなら •UniTaskとして使えるから簡単! • 同等の処理をasync/awaitで書ける!

Slide 14

Slide 14 text

Pun2Taskの使い方

Slide 15

Slide 15 text

Pun2Taskの使い方 •2つのstatic classがある • Pun2TaskNetwork • Pun2TaskCallback

Slide 16

Slide 16 text

Pun2TaskNetwork •「PhotonNetwork」のラッパー • PhotonNetwork.~ で呼び出せるAPIをasync/await化 して提供してる

Slide 17

Slide 17 text

Pun2TaskCallback •「MonoBehaviourPunCallbacks」のラッパー • 各種PUN2のイベントを UniTask / UniTaskAsyncEnumerable として提供

Slide 18

Slide 18 text

Pun2Taskでできること

Slide 19

Slide 19 text

Pun2Taskでできること 1 •ログイン処理のasync/await化 • PhotonNetwork.ConnectUsingSettings() をasync/awaitで待機できる

Slide 20

Slide 20 text

成功時はUniTaskが完了する 失敗時は例外が飛ぶ

Slide 21

Slide 21 text

Pun2Taskでできること 2 •ルーム参加処理周りのasync/await化 • JoinOrCreateRoom • JoinRoom • CreateRoom • LeaveRoom • など…

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Pun2Taskでできること 3 •各種イベントを待機する • OnConnected • OnCreatedRoom • OnPlayerEnteredRoom • など…

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Pun2Taskでできること4 •所有権(IsMine)の扱いをラクにする • 所有権取得のawait • 所有権が移ったことを監視

Slide 26

Slide 26 text

所有権取得のawait

Slide 27

Slide 27 text

所有権遷移の監視

Slide 28

Slide 28 text

まとめ •Pun2Task、ぜひ使ってみてください • PUN2の「使いにくい部分」を補うライブラリ • 使ってみてのフィードバックが欲しいです