概要
諸事情でUnityのUNETを使わざるを得なくなった人に対するラーニングパスの提案です。
最初に
それUNETじゃないとダメですか?Photonありますよ?Monobitありますよ?また、リアルタイム性が不要だったらNiftyクラウドあります。 あとソシャゲ的な作りの場合はUNETあんまり使わないですよ。LANじゃないインターネット経由のマッチメイキングはUNETも有料ですよ?
UNETのリリース時に謳われたアップデートが遅々として進まないのは、もしかしたらUNETはUnity的に見捨てられてて、ある日突然deprecatedになるかもしれませんよ。
https://forum.unity.com/threads/unity-hello-is-there-anybody-out-there-p.445978/
また、十分な開発期間が取れるならLLAPIやUDPを元にHLAPI相当を自作するとかも検討に入るかもしれませんよ。
…はい、やりましょう。これも人生です。
UNETがあんまり好きじゃない理由
- ドキュメントの未整備
- 様々なバグがドキュメントに記載ないまま 「仕様です」のまま放置されている 例: https://forum.unity.com/threads/onstartclient-called-before-scene-is-fully-loaded.427952/
- ホストマイグレーション未対応
- 実践的なサンプルの少なさ
- 出来る人の多くがPhotonに移行してしまうので、初心者向け資料ばかりある(この記事も初心者向けです。なぜなら僕が初心者なので)
- 標準のNetworkTransformと標準のNetworkAnimatorすら使い物にならないので自作することになる。
- SyncListを多用するとランダムにパケットロスする
この辺の話を聞いても、まだやりますか… 一応こういうまとめも訳しています。
UNET Unofficial Documentation (Errors, Workarounds, Best Practices)
https://qiita.com/neon-izm/items/8b98d8fbf590b31c72ef
具体的なラーニングパス
最初に 凹みさんの詳説を全部読む。
1. ひよこのたまごさんのUNET解説記事を全部読んで順番に試す。
http://hiyotama.hatenablog.com/entry/2015/07/06/153000
ステップバイステップの記事として一番情報量が多い日本語記事です。
2. Tank! Networking Demo.を穴が空くほど突つく。 Tank! Networking Demoは、2018年現在において、 まともな 資料があるUNETを使ったネットワークゲームっぽい作りの無料サンプルとしてほぼ唯一です。絶対におすすめです。 アセットストア https://assetstore.unity.com/packages/essentials/tutorial-projects/tanks-networking-demo-46213
解説動画 https://unity3d.com/jp/learn/tutorials/s/tanks-tutorial
Unityフォーラムスレッド https://forum.unity.com/threads/multiplayer-networked-tanks-demo-q-a.356443/ あと、このサンプルはPhoton版もあるので逃げたくなった時の移植も参考に出来ます(ボソッ)
それ以降
もっと凝った物ということで
Tank! Reference Project も2.と同じような感じですがキャラクター選択などの現実的な追加実装が入っています。また戦車かよ!という気もしなくもないですが…
https://assetstore.unity.com/packages/essentials/tutorial-projects/tanks-reference-project-80165
その他メモ(数か月前の自分に向けたメッセージ)
使う技術の取捨選択はこんな感じ
- NetworkManager,NetworkdDiscoveryはまともにゲーム作るなら99%の確率で継承した自前版を作ることになる。
- NetworkManagerを使った純粋なサーバークライアントモデルの資料は少ないのでホストクライアントモデルで作った方がマシ
- Rpcで呼ばないと各端末のオブジェクトが同期しない。(逆に言うと、同期しなくても良い物はRpcを避けた方がネットワークに優しい)
- 極論すればNetworkTransformやNetworkAnimatorもRpcの糖衣でしかない
- 随時ジョイン可能なゲームにすると考えることが一気に増えるのでロビー→締め切り→ゲーム開始 型にした方が良い
- そもそもネットワークゲームを初めて作る時にUNETを選ぶのは悪手。自分のネットワークの理解が足りないのか、自分のUNETの理解が足りないのか、UNET固有のバグかを絞り込めなくて死ぬ。MonobitかPhotonで始めましょう。
- UNETのAndroidとUnityエディタの通信は、ウィンドウズのファイアウォール切って試すと通信成功したので、横着するならこれで良い気はしました。
以下随時思いついたら追記
https://forum.unity.com/threads/my-compiled-list-of-unet-bugs-issues.403578/
Tank multiplayerがUNETのサンプルとしてほぼ唯一のまともな実装なんですが、そのチームはもうPhotonに乗り換えました
— 絵麻さんを養って幸せな家庭を築く (@izm) 2018年2月21日
オンラインゲームのしくみ
— 絵麻さんを養って幸せな家庭を築く (@izm) 2018年3月4日
Unityで覚えるネットワークプログラミング
かわいい表紙とUnityの文字と裏腹にガチンコのネットワークライブラリ作りから始めて、UDPのパケロス対策を内蔵した通信部を作り、キッチリしたマッチングとセッション管理まであるサンプルゲームをUNET無しで作る本だった。
BenchmarkNet (Stress test for ENet, UNet, LiteNetLib, Lidgren, MiniUDP, Hazel and Photon) | Unity Community https://t.co/MMIQgJRQsl UNetさんのつらいスレ眺めてる
— こりん@VR (@k0rin) 2018年1月20日
オッ
— てんちょー@めぐるーまー (@shop_0761) 2017年9月8日
>The sad reality is UE4's networking solution is top-notch and Unity's is...... well...... bottom-notch.https://t.co/RH63uAWlS8
細々と書いてたメモを公開。UNET分かりづらすぎる。 | UNETを使ってネットワーク間で処理を同期する - https://t.co/G3hLvSxaRX
— edom18@VR (@edo_m18) 2017年5月30日
UNET使ったカードゲームサンプル assetstore.unity.com