おもちゃラボ

Unityで遊びを作ってます

Unityでネットワーク通信をする(networkViewについて)

Unityとオンラインゲーム

オンラインゲームや通信対戦を使ったゲームを作ろうとするとネットワーク通信が必須になります。うげぇ、ネットワーク嫌い!とかソケット・・・ ((((;゜Д゜)))ガクガクブルブル!なんて人も多いでしょう。でも大丈夫です。Unityでネットワーク通信をする場合には、NetworkViewという便利なコンポーネントが用意されているので、NetworkViewを使えばネットワークの詳細に立ち入らなくても簡単にネットワークゲームが作れてしまうのです。

とはいっても、ネットワークに関して全く知らずに作るのと、ネットワーク帯域などを意識して作るのでは、自然と出来栄えに差がついちゃいますよね。でも大丈夫!オンラインゲームの設計に関して一冊でまるっと説明してくれている名著があります。この「オンラインゲームを支える技術」にはネットワークトポロジやアーキテクチャ、通信帯域、RPCの話までオンラインゲームに必須の知識がみっちり詰まっています。
 

UnityのNetworkViewを使う

さて、ではいよいよUnityのNetworkViewの話をしていきたいと思います。しばらくはMasterとClientの2人がネットワーク通信をする場合を考えて行きます。このMasterとClientの間で何かを共有したい場合、まずは共有したいオブジェクトにNetworkViewコンポーネントをくっつけます(具体的な方法は第三回で説明します)これによって、生成したオブジェクトはネットワーク通信により同期されMasterとClientの間で同じ動作が可能になります。

f:id:nn_hokuson:20140408225135j:plain

Prefabからオブジェクトを生成する際には、通常Instantiate()を使いますが、同期したいオブジェクトについてはNetwork.Instantiate()を使って生成します。下の図の場合、MasterがNetwork.Instantiate()を使用してオブジェクトを生成すると、Client側にもそのコピーが生成されます。このClientに出来るオブジェクトはあくまでコピーであり、オリジナルのシャドウのようなものです。
 
f:id:nn_hokuson:20140407205614j:plain

Master側がオブジェクトに移動・回転・拡大縮小の操作を加えると、それがネットワークを通じて同期されClient側のオブジェクトもMasterと同様に移動・回転・拡大縮小されます。

f:id:nn_hokuson:20140407223039j:plain

先ほどの逆で、Clientのオブジェクトを移動させてみてもMasterのオブジェクトは動きません。これ注意!なぜなら、ClientのオブジェクトはMasterのオブジェクトのシャドウだからで、いくら影を操作してもオリジナルは動きませんよねー

f:id:nn_hokuson:20140407223054j:plain

これまでの知識で、マリオカートとかモンスターハンターのようなネットワーク対戦のゲームを作るにはどうしたらよいか考えてみましょう。といっても、そんなに難しくはなくて、自分が動かすキャラクタは自分が生成する、というだけです(笑)これによって、それぞれ自分の手元にオリジナルの自キャラがいて、相手の画面に相手のシャドウが存在するようになります。

f:id:nn_hokuson:20140407225023j:plain

ここまでの内容をまとめると・・・。オブジェクトを生成した側がオリジナル、オブジェクトを生成された側がシャドウのキャラを持つことになります。オリジナルに対して、移動・回転・拡大縮小の操作を加えると、シャドウのキャラもネットワーク同期され同じ動きをするけど、逆にシャドウを操作してもオリジナルは同期して動きません。

次回は、RPC(Remote Procedure Call)のお話とNetwork.Destroyのお話をしたいと思います。そして第三回には実際にUnityを使ったプログラムを紹介します。また日本語でnetworkViewが解説されている数少ないサイトとしてhttp://terasur.blog.fc2.com/blog-entry-67.htmlはとても参考になったので、ぜひ読んでみてください。

参考図書

「オンラインゲームの仕組み」

「Unity4入門 最新開発環境による簡単3Dゲーム製作」

「ゲームの作り方 Unityで覚える遊びのアルゴリズム」

こちらはUnity中級編の参考書です。本にはUnityで使われるPrefabやComponentなどの仕組みが分かりやすく解説されています(一方で、ソースコードの解説は自分で読んで理解しろ方式です)2Dのゲームから3Dのゲームまで、ゲームのサンプルが10個もついており(しかもバンダイナムコスタジオの現役プログラマが作ったやつ!)タイトルには"遊びのアルゴリズム"と付いてるだけあって「どうやったら面白くなるのか?」ということがゲームの参考書としては珍しく解説されているので是非どーぞ。


ゲームの作り方  Unityで覚える遊びのアルゴリズム
加藤 政樹
ソフトバンククリエイティブ
売り上げランキング: 19,038