Slide 1

Slide 1 text

2018年現在におけるUnity向け リアルタイムネットワークエンジン 選定について 2018/12/10 Unity Network完全に理解した勉強会 @izm

Slide 2

Slide 2 text

自己紹介 @izm インターネット民主化オムライス SHOWROOM xR Labで働いています この発表は個人の見解であり所属する組織の意見を 代表するものではありません。

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

ご静聴ありがとうございました

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

本日のお品書き ・ゲームエンジンにおけるリアルタイムネットワークライブラリとは ・Unityにおけるリアルタイムネットワークライブラリの歴史 ・ユースケース毎の2018年現在の技術選定

Slide 7

Slide 7 text

注意事項 この発表はターンベースや非同期のネットワークゲームを想定しません。 この発表はマスターサーバを用意するゲームを想定しません。(ゲーム中の 1クライアントがHOSTとして振る舞 うゲームを想定します。つまり大規模な開発を想定しません)

Slide 8

Slide 8 text

そもそもゲーム向けのリアルタイムネットワークライブラリっ て何 →普通のネットワークライブラリ (TCPやUDP,Send, Recv,Connect,Disconnect)+ ゲームで使う機能を追加した もの

Slide 9

Slide 9 text

リアルタイムネットゲームで使う便利機能 (上にいくほど重要) ・Lobby(MatchMaking) ・RPC(Remote Procedure Call) ・SyncVar ・Network Transform ・Network Instanciate ・Network Destroy

Slide 10

Slide 10 text

Lobby Matchmaking ルームを立てて、メンバーを集める部分 …オンライン上でロビーサーバを提供してくれます。 Unityの場合、大体ネットワークライブラリに付属のサービスを使うか、自前でマッチングサーバを立てるかで す。

Slide 11

Slide 11 text

RPC ・一番大事 ・ぶっちゃけRPC以外の機能はRPCの糖衣構文と言っても過言では無い ・RPCを制すものは世界を制す(これは大げさですが) ・Unityネットワーク通信の基盤である「 RPC」について、意外と知られていないボトルネックと、その対策法 (モノ ビット 安田さん) https://www.slideshare.net/yhonjo/unityrpc

Slide 12

Slide 12 text

たとえば プレイヤーAさんが銃を発射した時 プレイヤーBさんの端末上のAさんも銃を発射してほしい →RPCの出番!! https://docs.unity3d.com/ja/current/Manual/UNetPlayers.html

Slide 13

Slide 13 text

SyncVar,NetworkTransform,NetworkInstanciat e,NetworkDestroy これらは全てRPCで書き下すことが出来ます。 なので「信用できないネットワークライブラリ」を使う時は、困ったら RPCに逃がしましょう。

Slide 14

Slide 14 text

Unityにおけるネットワークライブラリの歴史 1. NetworkView(Unity4以前から) 2. Photon Unity Networking(v1) 3. UNET(Unity5.1~) 4. Monobit Engine 5. Photon(v2) みたいな順番で登場してたはず …

Slide 15

Slide 15 text

PUN1.0を触る とりすーぷさんがこの後解説されるのでサラっといきます。 ・Resources以下にprefabを置く ・RPCの指定が関数名の「文字列」を渡す など、作りが古い。 リリースが古いからです…

Slide 16

Slide 16 text

UNET Unity5.1から実装された新しいネットワークライブラリ UDPベースのLLAPI+近代的なHLAPIを備えている。 リアルタイムネットゲームを作りやすくなりそうな雰囲気!

Slide 17

Slide 17 text

UNET(闇) ホストマイグレーション… NetworkMigrationManager(5.3系から実装)マッチメイクは対応してないので、LAN内対戦なら使える。マッチメイクするスマホとかで マイグレーション出来なくて死ぬ。 Reliable Sequencedにしても全然信頼できない 同期オブジェクトが300超えた位で謎のエラー吐く SyncVarやSyncListがSyncしない(ランダムにパケットロスする) NetworkAnimatorが同期失敗するので自前実装しがち NetworkTransformの初期実装がガタガタ っていうかNetworkTransformが位置動かないと同期しないので回転させた時にPositionを0.0000001fくらい動かして人力SetDirty()みたいなことをするハメに なって泣く https://wobesdev.wordpress.com/2016/09/09/networking-on-unity5/ のNetworkTransformおすすめ

Slide 18

Slide 18 text

UNET(闇) 展示会場でなんか30台くらいのスマホVRHMDに対して動画再生開始のキューだけ送りたいんだよね~ →無線LAN+UNETの合わせ技を食らい、数%の確率で再生されない端末が出てくる (自前で再送処理を書きがち)

Slide 19

Slide 19 text

UNETは何がいけなかったのか ・(比較的)良い設計 ・貧弱なドキュメント ・サンプルプロジェクトの無さ ・フィードバックが無視される ・バグが永遠に直らない

Slide 20

Slide 20 text

2018年現在における(おすすめ)技術選定 (izm独断) 困ったらPhoton Unity Networking v1を使いましょう。 ・Forumが機能している ・サンプルコードが提供されている ・Battle-Proofed ・作りが古いのは我慢しよう。動く保証があるのは神。

Slide 21

Slide 21 text

Photon Unity Networkingが適さないパターン ・中東,アフリカ向け(サーバが遠い) ・超多人数バトルロワイアル(助けて …) ・サーバ維持費を0円にしたい(そんな無茶な …) ・オフラインのLAN内で完結するシステムを作りたい(なのに Photon Server代は払いたくない???まじ で!?!?!?)

Slide 22

Slide 22 text

オフラインのLANだけで完結するシステム??? BtoB案件とか 展示コンテンツとか 教育向けとか 製造業向けとか 関わってる人いますか?(挙手)

Slide 23

Slide 23 text

LAN内 = PUN,MUN不可 PhotonさんやMonobitさんはビジネスモデル的にリレーサーバを提供して通信量に対して課金をさせるので、リ レーサーバを通らないLAN内をサポートしない。 正確にはPhotonServerやMonobit Serverライセンスがあるけど、大体の場合プロジェクト規模に対して予算 オーバー PUNで作ってて、土壇場でLAN内向けって言われた事があります。泣いた。

Slide 24

Slide 24 text

LAN内で使う=UNET????? 触りたくないよね…

Slide 25

Slide 25 text

今日はこれだけ覚えて帰って欲しい Mirror 旧UNET HLAPI Pro→HLAPI Community Edition の後継ネットワークライブラリ https://forum.unity.com/threads/mirror-networking-for-unity-aka-hlapi-community-edition.425437/

Slide 26

Slide 26 text

Mirror UNETに対して Bugfixと安定化とパフォーマンスチューニングと TCP を加えて マッチメイキングとリレーサーバとバグと信用ならない UDPベースのLLAPIを抜いたライブラリ using Mirror; //using UnityEngine.Networking; とネームスペース入れ替えだけで結構動く!!

Slide 27

Slide 27 text

Mirror激推し 数年間メンテされ続けたUnity向けMMORPGフレームワークアセットである uMMORPGの作者のライブラリです。 人類の中でトップクラスに UNETに苦しんできた作者を信じような!!! HLAPI Community Editionも継続してダウンロード可能 (2017.4向け)

Slide 28

Slide 28 text

Mirror LAN内利用 NetworkDiscoveryは?→自前で書けばOKです。 MirrorのNetworkManagerとUnetのNetworkDiscovery が合わさり最強に見える( ipaddressがffffを含まないのに注意)

Slide 29

Slide 29 text

本日のまとめ オフラインLAN環境で使 う? PUN1.0 Mirror

Slide 30

Slide 30 text

本日のまとめ リアルタイムネットワークゲームを Unityで作るならPhoton v1を最初に検討してみて下さい。 LAN内限定の場合はPhotonやMonobitが(Serverライセンス買わないと)使えないので、Mirrorという代替ライ ブラリがお勧めです。 PUBGみたいな多人数バトルロワイヤルは大変だと思う。

Slide 31

Slide 31 text

新しいUnity Networking System めちゃくちゃ凝ってる(UDPベースで自前で再送処理を持ってる ) 潜在的なパフォーマンスがかなり高い FPSサンプルが実用的な速度で動く 今後に注目…