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

PUN2をasync/awaitで使えるライブラリつくってみた「Pun2Task」

torisoup
December 09, 2020

 PUN2をasync/awaitで使えるライブラリつくってみた「Pun2Task」

PUN2をasync/awaitで使えるライブラリ、Pun2Taskの紹介スライドです

動画
- https://www.youtube.com/watch?v=YEGQcWynuIM

【年末だよ】Unity お・と・なのLT大会 2020
https://meetup.unity3d.jp/jp/events/1266/

torisoup

December 09, 2020
Tweet

More Decks by torisoup

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. PUN,PUN2の弱点

    View full-size slide

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

    View full-size slide

  10. 例:ログイン

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. Pun2Taskの使い方

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  18. Pun2Taskでできること

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  24. 所有権取得のawait

    View full-size slide

  25. 所有権遷移の監視

    View full-size slide

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

    View full-size slide