【Android, WebGL】Unity, PUN2でクロスプレイを実装する方法【iOSはわからない】

PUN2(Photon Unity Networking 2):

を使ってオンライン機能をもったゲームをUnityで作る時に、android, webGL, iOSなど、異なるプラットフォーム同士でも同じ部屋でもちゃんと遊べるようにしたいですね。私の最初のゲーム「直進パズルオンライン」

google play(android)

unityroom(webGL)

でもそうしたのですが、そこで少し躓いたのでここにメモします。

【前提】

Unity ver. 2021.3.30f

PUN2 ver. PUN: 2.40 Photon lib: 4.1.6.11

同じプラットフォームでの通信はOK


【最初にやったこと】

PUN2の設定項目を以下のようにしていました。
















これでgoogle playに登録し、androidスマホ同士でオンライン対戦ができていました。ただし、この設定のままWebGL形式でビルドしてunityroomに登録したところ、android同士、WebGL(unityroom)同士では同じ部屋に入ってオンライン対戦できるのに、androidとWebGLのクロスプレイができませんでした。具体的には、同じ部屋に入ったつもりでも、互いに認識せず、違う部屋の判定になっているようでした。


【解決法】

PUN2の設定項目を以下のように変更しました。

























通信ProtocolをUDPからWeb Socket Secure(WSS)に変更しました。そのうえでandroid/webGLでビルドし、それぞれgoogle play/unityroom双方に登録したところ、互いに通信ができました。ちなみに、Tcpではうまくいかなかったと思います。(WSSでも最初うまくいかないときがあった。原因は謎。)これでなぜ解決できたのかというとWebGL側にあって、株式会社フレームシンセシス様によると、”WebGLビルドでもそこそこいい感じに動く(ただしトランスポートにWebSocketが使用されTCP通信になる)”とあり、少なくともudp通信はしないみたいです。(私はいまいち意味はわかっていない)そういうわけで、上記対応でうまくいきました。

android, WebGLとiOS間でも通信がうまくいくかどうかも気になるところですが、今Mac/iOSの開発環境がありませんので、調査できません。今後(の収益)に期待。





コメント

このブログの人気の投稿

【TopDown Engine】見下ろし2Dアクションゲームのためのアセット

初投稿

【コルーチン】処理順を大事にしたい時、処理を待ちたい時に使うコルーチンについて