読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

Unityのネットワーク-Unity5.0時点での概要-

Unityメモ 勉強メモ

本記事は、Unity5.0以前の古いネットシステムのものです。Unity5.1からはUNetというより簡単で強力なマルチプレイヤー用の環境が実装されています。5.1以降で構わない場合は、UNetを先に調べてみてください。
Unity - Manual: Multiplayer and Networking


次へ

Unityのネットワーク機能を試してみます。Unity5.0以前に付属のネットワーク機能は、大きく分けると2つのパートによって構成されます。1つは、世界中にいるプレイヤー同士がゲームに接続するための仕組みを提供するパート。もう1つは接続したプレイヤー同士の間でゲームの進行状況をやりとりするパートです。今回は接続は決めうちで簡単に実装して、マルチプレイヤーでゲームの世界を同期させる最低限のことだけやります。

プロトタイピングや展示であれば今回の方法で十分でしょう。マッチング部分の解説は、以下の参考図書にサンプルコードがあって便利です。

参考図書

Unity5.0以前の方法は、以下の書籍がよくまとまっています。チュートリアルに沿って一通りの機能に触れることができます。まずはこの本で概要を把握しました。

Unityゲーム開発 オンライン3Dアクションゲームの作り方

Unityゲーム開発 オンライン3Dアクションゲームの作り方

Unityのネットワーク近況

Unity5.1から、新しいマルチプレイヤー機能のプレビュー版が用意されました。そちらの方が簡単そうですが、まだ正式版ではないことや、将来的に有料になりそうな情報もあるので今回はやりません。
Unity - Services - Multiplayer

公式ドキュメント

以下の公式ページに詳しい解説があります。
Unity - マニュアル: 旧ネットワークリファレンスガイド

用語

Networkコンポーネント

サーバーを起動したり、サーバーに接続したりするためのコンポーネントです。プログラムコードから利用します。

NetworkViewコンポーネント

ネットワーク上でデータを共有するためのコンポーネントです。ゲームオブジェクトにアタッチして使います。キャラクターの姿勢やアニメなど、全てのプレイヤー間で常に共有しておきたいデータのやりとりに利用します。

RPC(Remote Procedure Calls)

ネットワーク上の他のPC上で関数を呼び出すことができます。イベント発動やアイテム取得などの重要な処理を行うのに適しています。

送信先を、全てのユーザーや、ゲームサーバー、特定のクライアントなどを選択できます。あるイベントの結果をサーバー上で判断した後、正式な決定をクライアントに配信するといった使い方ができます。

RPCが発行した命令はゲームサーバーに貯めておくことができます。これにより、あとから接続したユーザーが自分が登場する前にゲーム内で起きていたことを共有することができます。

Network.Instantiate / Network.Destroy

ネットワーク上でゲームオブジェクトを生成したり(Instantiate)、削除したり(Destroy)します。通常のInstantiate()やDestroy()は、個別のゲーム内のみにゲームオブジェクトを登場させますが、Networkから呼び出すと、すべてのユーザーのゲームにゲームオブジェクトを登場させることができます。

Network Manager

ネットワークをデバッグするときに利用するコンポーネントです。Debugレベルとネットワーク上のデータが送信される秒あたりの回数を設定すると、設定に合わせてネットワークトラフィックをログ出力してくれます。


それでは、次から実装を開始します。

次へ