本記事は、Unity5.0以前の古いネットシステムのものです。Unity5.1からはUNetというより簡単で強力なマルチプレイヤー用の環境が実装されています。5.1以降で構わない場合は、UNetを先に調べてみてください。
Unity - Manual: Multiplayer and Networking
Unityのネットワーク機能を試してみます。Unity5.0以前に付属のネットワーク機能は、大きく分けると2つのパートによって構成されます。1つは、世界中にいるプレイヤー同士がゲームに接続するための仕組みを提供するパート。もう1つは接続したプレイヤー同士の間でゲームの進行状況をやりとりするパートです。今回は接続は決めうちで簡単に実装して、マルチプレイヤーでゲームの世界を同期させる最低限のことだけやります。
プロトタイピングや展示であれば今回の方法で十分でしょう。マッチング部分の解説は、以下の参考図書にサンプルコードがあって便利です。
参考図書
Unity5.0以前の方法は、以下の書籍がよくまとまっています。チュートリアルに沿って一通りの機能に触れることができます。まずはこの本で概要を把握しました。
Unityゲーム開発 オンライン3Dアクションゲームの作り方
- 作者: 竹内大五郎,石黒赳彦,高橋誠史,香川寛和,河本健太郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Unityのネットワーク近況
Unity5.1から、新しいマルチプレイヤー機能のプレビュー版が用意されました。そちらの方が簡単そうですが、まだ正式版ではないことや、将来的に有料になりそうな情報もあるので今回はやりません。
Unity - Services - Multiplayer
公式ドキュメント
以下の公式ページに詳しい解説があります。
Unity - マニュアル: 旧ネットワークリファレンスガイド
用語
NetworkViewコンポーネント
ネットワーク上でデータを共有するためのコンポーネントです。ゲームオブジェクトにアタッチして使います。キャラクターの姿勢やアニメなど、全てのプレイヤー間で常に共有しておきたいデータのやりとりに利用します。
RPC(Remote Procedure Calls)
ネットワーク上の他のPC上で関数を呼び出すことができます。イベント発動やアイテム取得などの重要な処理を行うのに適しています。
送信先を、全てのユーザーや、ゲームサーバー、特定のクライアントなどを選択できます。あるイベントの結果をサーバー上で判断した後、正式な決定をクライアントに配信するといった使い方ができます。
RPCが発行した命令はゲームサーバーに貯めておくことができます。これにより、あとから接続したユーザーが自分が登場する前にゲーム内で起きていたことを共有することができます。
Network.Instantiate / Network.Destroy
ネットワーク上でゲームオブジェクトを生成したり(Instantiate)、削除したり(Destroy)します。通常のInstantiate()やDestroy()は、個別のゲーム内のみにゲームオブジェクトを登場させますが、Networkから呼び出すと、すべてのユーザーのゲームにゲームオブジェクトを登場させることができます。