Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

勉強会レポ : Unity Network 完全に理解した

 

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity Network 完全に理解した 」

connpass.comハッシュタグ : #UnityNetwork完全に理解した

f:id:Raspberly:20181212020943j:plain

 

 

 動画はこちらになります。

www.youtube.com

 

 

 

 0. タイムスケジュール

  内容 担当
19:00 受付開始 -
19:30 イントロダクション -
19:40 Unity対応しているmBaaS全部紹介する @Takaaki_Ichijo
20:10 GS2 でネットワーク対応をしよう @kazutomo
20:40 休憩 -
20:45 2018年現在におけるUnity向けリアルタイムネットワークエンジン選定について @izm
21:15 LT: Photon Cloud ことはじめ @torisoup
21:25 LT: ※このLTは個人の見解であり所属する組織の公式見解ではありません(仮) @tnayuki
21:35 懇親会 -
22:15 片付け -

  会場提供はミクシィさんです。
懇親会と動画、生放送までしてくれています。

 

 
1. Unity対応しているmBaaS全部紹介する

スライド

www.slideshare.net

一條貴彰 といいます。
unityのaudioに関する本を書いています。

 

mBasSとは何ぞや

モバイルアプリ用のサーバーサイドのサービスです。
DBやログイン管理などを簡単に実装でき、運営管理を丸投げできます。

共通の機能として、
プッシュ通知、DB、課金機能、ログインアウト、サーバー側の処理などなど


GS2

使ったことがないので中の人を呼びました
次の講演をご覧ください。

 

NCMB

元中の人をやってました。

・強み

実装がわかりやすい、管理画面もわかりやすい(一番いいところ)
日本生まれのサービスなので対応が早い、SDKが軽い。
パスワードの再発行の仕組みがもうある。

・弱み

ゲーム専用ではなく、様々なアプリ用に作られています。
拡張しづらい、定期実行系のサービスがない。
使いやすいがうえにガバる。

 

詳しい解説の本があるので参照してみてください。

https://www.amazon.co.jp/dp/4802610998

・解説

Unityで『ニーア オートマタ』の義体システムっぽい機能を作る - Qiita

【NCMB】【Unity】ファイルストアでセーブデータ(JSONファイル)のバックアップ - Qiita

 


Firebase

・強み

天下のgoogle直運営
大型タイトルで使われている
プッシュ通知のみなら無料(なおガバる)

・弱み

ゲーム特化ではない
DBの設計が必要だった(最近変わった)
Unityプラグインがダメ 重いし ビルドが長い
機能追従が遅い
PC/Macビルドでは動作しない

 

・オススメ資料

FirebaseとUnityでは ソシャゲは作らない方が良い話 - Speaker Deck

 

 

GameSparks

・強み

天下のAmazon運営
ゲーム用でカバーしている範囲が広い
管理画面でAPIテスト実行ができる
コンシューマゲーム機にも対応(海外展開では大事)

・弱み

日本語のドキュメントがない
機能が豊富だが、どれ使えばいいかよくわからん
DB機能が途中で変わった(ドキュメントが少ない)
日本での利用事例が少ない
本の窓口がまだまだ

・お勧めドキュメント

Amazon GameSparks for Unityを触ってみた - Qiita

Amazon GameSparksでUnityゲームにランキング機能を実装する - Qiita

 


PlayFab

使ってないので所感だけ
・強み

ゲーム内イベントでの運用(特定期間内のランキング上位者に報酬を与えるとか)が根底にある
サーバー側をC#で書けるようになる
コンシューマー対応
日本語化されてます

・弱み

使ってないのでわかりません

・資料

UnityでのPlayFabの導入覚え書き - JackMasaki’s blog

 


その他

Kii Cloud
IoT クラウドプラットフォーム Kii - Kii株式会社

Lean Cloud(中国)
LeanCloud

Gamebackend(韓国)

뒤끝



まとめ

ncmb:初心者向け
GameSpark:コンシューマーも見据えてしっかり作りたい人向け
Firebase:ただでプッシュ通知したい人向け

 

 

 

 

 

 

 

2. GS2 でネットワーク対応をしよう

スライド

 

提供中のサービス

・ゲーム内通知をプッシュ通知
・イベントと連動したショップやガチャの開催
・特定の期間だけ数回買える商品 など

 

セットアップの流れ

・アカウント登録
・UnityAsset(SDK)を導入
・IAP(課金石の管理などで依存しています)をインストール
・Editor拡張を有効化(タブに新しい項目が追加されます)クレデンシャルをコピーして有効化

・GS2Accountの追加
Prefabがあるのでシーンに追加

・課金通貨の流れ
これも同じようにやります、Prefabをシーンに追加

 

 

ここまでは高レベルSDK
低レベルSDKhaもっと柔軟にできます

 

利用料金

2パターンあります。

APIリクエストベース
・10万回までは無料

時間ベース
・最初の1年間は月750時間無料

 

GS2-Moneyは例外

未使用残高が10万円を超えるかAPIko-ruが10万回を超えるまで無料

 

事例を募集しています

 

質問

Q : 対応してるプラットフォームは?
動作に関しては何でも動きます、APKがサーバーを呼び出すのであればなんでもいいです。
IAPに関してはAndroid/IOSのみサポートしてます。

 

Q : レシートのサーバーサイド検証は?
A : IAPからGS2にレシートが投げられる。
APIとしてはレシート検証でのみ残高を増やします。減らすのは別でできる。
Unityエディタでは加算もできます

 

 

 

 

 

 

 


3. 2018年現在におけるUnity向けリアルタイムネットワークエンジン選定について

スライド(Soeakerdeckをそのまま張り付けると表示がおかしくなるのでリンクのみ)

 

先ほどまではバックエンド系の話でしたが、
ここではリアルタイムについて話します。

 

リアルタイムネットゲームで使う機能はいろいろありますが

RPCが一番大事です

位置やステータスの動機なども究極的にはRPCで書けちゃうのです。
ネットワークでテストするならまずはRPCからやりましょう。
モノビットの資料が参考になります

Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法

RPCは攻撃やジャンプの動作の動機に使います。

PUNについて話そうと思いましたがたぶんとりさんが話してくれるでしょ。

 

 

UNETは何がいけなかったのか

Photonよりハイレベルだが
ドキュメントが貧弱 サンプルがない

 

今何を選ぶべきか

まずはPhotonを選ぶべき。
フォーラムもありドキュメントもあり、採用実績もあります。
作りは古いが我慢しましょう。

中東向けとかだとサーバーがないため、リレーサーバーになる。
超多人数のバトルロワイアルはつらい。

 

オフラインのLANだけで完結させたい場合(イベントや、社内、学校内)
LAN内だとリレーサーバーが使えない。


これだけ覚えて帰って

Mirror
LANない運用ならTCPの方が楽なのでMirrorは結構いい

MirrorはAsset Storeの「uMMO」の作者が書いています。
UNETで苦しんだ方が自前で書いたライブラリなので信用できますよね。
NetworkDiscavaryはないです。

 

まとめ

オンラインならPUN
オフラインならMirror

新しいUnityNeworkSystemもあります

 

質問

Q : モダンなものにおいてRPCはどういう体系なの?
A : photonは名前の文字列で送るんです、現代的なのはアトリビュートで送ります。
なので書く時の作法が古いよという感じです。

 

 

 

 

 

 

LT2: ※このLTは個人の見解であり所属する組織の公式見解ではありません

Tiny Unityについて話します

f:id:Raspberly:20181212012628p:plain

f:id:Raspberly:20181212012650p:plain

 

サンプルはこちら
NetworkedSimpleInput

LT中にみんなで接続した時のGIF(同時接続は20人まで)
白が自分で、赤が他プレイヤーです。

f:id:Raspberly:20181212012846g:plain

 

Photonを入れてもTinyUnityは読み込んでくれない
なのでdocument.writeでphotonのライブラリを無理やり読ませています

 

おまけ

ミドルウェア選定のコツ
いろいろありますが、学習することに罪はない。
ただキケンなプロダクトもあります。
オープンソースだと自分でやってくこともできます(Mirrorとか)

 

あんまり概念などは変わらないので無駄になりません。
いろいろ学んで自分だけのスキルセットを身につけよう。

 

サンプルソース

 

 

 

 

 

LT1. Photon Cloud ことはじめ

スライド

niconare.nicovideo.jp過去にPhotonのゲームを作っているのでその知見を話します。
PUN1を使うためのテクニックや注意点を話します。

 

Photon Cloudとは

リアルタイム通信のクラウドサービスとUnity向けSDKです

 

ログイン回りを楽にしたい

・ログインAPIが使いにくい
対策:PhotonRxを使いましょう
async/awaitで書けます(PUN2だと使えません)

 

姿勢の動機手法

・姿勢の動機
位置と角度スケールなどは、PhotonTransformViewコンポーネントを張り付けるだけで同期してくれます。

・Animatorの動機
同じようにPhotonAnimatorViewコンポーネントで同期します。
トリガーだけは未対応なのでRPCで実装しましょう。

・3dのアバターvrなどで自由に動かしたいとき
HumanPose
ヒューマノイドアバターの関節角を送って同期します


パフォーマンスチューニング

気をつける要素


・メッセージ数

送った数+受信者の数が送信回数です。
消費数が大事で、同時接続数が多くなればなるほど大変です。

・削減方法
対戦人数を見直しましょう、100人とか無理なので4人くらいに。
差分だけ送る。
数フレームまとめておくる。
そもそも送らない。

 

・パケットサイズ

オーバーするとお金が発生します。(お金で解決できます)
大きなパケットはラグの原因になります。

 

MTU

この数値を超えるパケットは分割されます。
どんなに大きくても1500バイト、できるだけ小さくしよう。
・intをshortにする
・boolをまとめる
・同期するパラメータを見直す

型のサイズはリファレンスを読もう。

また、Wiresharkを使うと通信の中身が見れて良い。

 

HumanPoseの最適化

・floatを削る
・精度を落とす 32から16bitへ
・変換は自前で実装しましょう

精度を落として大丈夫か?
線形補完もあるのであまり気づかないレベルです。

 

まとめ

Photon使えば簡単です
チューニングする時は数字をちゃんと見ましょう

 

 

 

 

 

 

タイムライン

 

 

 

 

 

 

 

 

感想

とてもわかりやすい勉強会でした、完全に理解したシリーズの中でも(自分にとって)ちょうどいい難易度でした。
 私はネットワークライブラリでいうとNCMBをよく使っていますが、他のmBaaSについてとても詳しく知ることができました。こういうのって自分で試すと時間と労力が半端じゃないので詳しい人に教えてもらえる機会は結構貴重な気がします。

そういえばPhoton Boltも無料化しましたが、あれはどうなんだろう。
PUN2と同じで使ってる人見ない・・・

f:id:Raspberly:20181212021154j:plain

お寿司おいしい。
お魚食べられない人に配慮してサンドイッチもありました。