Unity Multiplayer Networking入門<基本編>
タイトル通りです.Unityでマルチプレイヤーゲームを作成するのに最低限必要な要素を備忘録的に記します.下記チュートリアルを読むこと必至です.
- Network Manager
- Network Manager HUD
- NetworkIdentity
- NetworkBehaviour クラス
- NetworkTransform
- リモートアクション
- NetworkServer クラス
- ステートの同期
- NetworkStartPosition
- 参考サイト
Network Manager
Network Managerはゲームのネットワーク状態を管理するコンポーネントです.
プロパティー: 説明: playerPrefab クライアントが接続されたときにプレイヤーをインスタンス化するためのプレハブ playerSpawnMethod Random を選ぶとランダムに選択した startPositions にプレイヤーを生成します。 Round Robin を選ぶと設定リストの startPositions を循環します。
Player PrefabにはプレイヤーのPrefabを,Player Spawn Methodには,StartPositionsコンポーネントをアタッチしたオブジェクトにプレイヤーを
また,動的に生成されるその他のオブジェクト(敵,弾丸など)のプレハブも登録される必要があります。 ClientScene.RegisterPrefab() 関数で行うことができますが,Registered Spawnable Prefabsに自分で追加することもできます.
Unity - マニュアル: NetworkBehaviour
Unity - マニュアル: NetworkManager を使用する
Network Manager HUD
Network Manager HUDコンポーネントはNetwork Managerと同時に使うことでシンプルなUIを表示します.テスト用に使うべきで,リリース用に使うことは推奨されていません.
Unity - マニュアル: Network Manager HUD
NetworkIdentity
公式マニュアルによると,
NetworkIdentity は、オブジェクトのネットワーク ID を扱い、ネットワークシステムで管理するために使用されます。
とのことです.敵を出現させるWaveや,プレイヤー,敵,弾丸などに使用します.また,
プロパティー: 説明: serverOnly クライアント上でオブジェクトが生成されないようにするためのフラグ localPlayerAuthority オブジェクトがクライアントによって制御されている場合は true
例えば,ServerOnlyは敵を出現させるWaveに,Local Player Authorityはプレイヤーや敵に適用します.
Unity - マニュアル: NetworkIdentity
Unity - スクリプトリファレンス: NetworkIdentity
NetworkBehaviour クラス
名前空間UnityEngine.Networkingを使用することにより,使えるようになります.
NetworkBehaviour は NetworkIdentity コンポーネントを持つオブジェクトとともに機能する、特殊なスクリプトです。
プレイヤーやプレイヤーの状態(HPなど),敵や敵を生成するWaveのスクリプトに継承させます.
プロパティー: 説明: isLocalPlayer ローカルのクライアントで使用(操作)されるプレイヤーオブジェクトである場合は true を返します。 isServer オブジェクトがサーバー上で実行されていて、かつ、サーバー上で生成された場合は true を返します。
Unity - マニュアル: NetworkBehaviour
Unity - スクリプトリファレンス: NetworkBehaviour
OnStartLocalPlayer()
ローカルプレイヤーのオブジェクトがセットアップされたときに呼び出されます。
(中略)これはカメラや入力装置(input) など、ローカルプレイヤーのみアクティブ化する必要のあるコンポーネントや機能を有効化するために適切な場所です。
上記のチュートリアルでは,自機の色を青色に変更するために使いました.
Unity - スクリプトリファレンス: Networking.NetworkBehaviour.OnStartLocalPlayer
OnStartServer()
OnStartServer 関数は、サーバー上でオブジェクトが生成されたとき、サーバーにあるシーン内のオブジェクトが起動した(読み込みした)ときに呼び出されます。
チュートリアルではEnemySpawnerが敵を生成するときに使われました.
Unity - スクリプトリファレンス: Networking.NetworkBehaviour.OnStartServer
NetworkTransform
NetworkTransform コンポーネントはネットワークを介してゲームオブジェクトの移動を同期します。NetworkTransform のインスペクターには NetworkSendRate スライダーがあります。これは作成後、更新を必要としないオブジェクトのためのもので、弾丸などではスライダーを 0 に設定します。
Unity - マニュアル: NetworkTransform
リモートアクション
[Command]
コマンドはクライアントの操作するプレーヤーオブジェクトから、サーバー上にあるプレーヤーオブジェクトへと送信されるものです。(中略)関数をコマンドに導入するためには、カスタムアトリビュート [Command] を追加し、“Cmd” プレフィックスを加える必要があります。
要するに,クライアント上で呼ばれサーバ上で実行されるということです.チュートリアルではプレイヤーが弾丸を発射するメソッドで使用されました.
[ClientRpc]
ClientRpc はサーバー上のオブジェクトからクライアントのオブジェクトへと送信されます。(中略)関数を ClientRpc に含めるためには [ClientRpc] カスタムアトリビュートを追加し、“Rpc” プリフィックスを付けてください。
[Command]とは逆で,サーバ上で呼ばれクライアント上で実行されます.チュートリアルではHealthスクリプト内のプレイヤーをリスポーンさせるメソッド内で使用されました.
NetworkServer クラス
NetworkServer.Spawn
準備できているすべてのクライアントで特定のゲームオブジェクトを生成します。
登録されているプレハブ、または、カスタムの Spawn 関数からインスタンス化される新しいオブジェクトになります。
チュートリアルでは,弾丸や敵を生成するメソッド内で使用されていました.事前にRegistered Spawnable Prefabsなどで,Prefabを登録しておく必要があります.
Unity - マニュアル: オブジェクトの Spawn(生成)
Unity - スクリプトリファレンス: Networking.NetworkServer.Spawn
ステートの同期
[SyncVar]
SyncVars は、NetworkBehaviour コンポーネントのメンバー変数です。これはサーバーから各クライアントへ同期されます。(中略)利用可能なネットワーク上のオブジェクトの全ての SyncVars の最新の状態が、その新しいオブジェクトやプレイヤーに送られます。
チュートリアルでは,Healthスクリプト内の現在のHPを格納するフィールド変数に使用されていました.
NetworkStartPosition
NetworkStartPosition は、プレイヤーオブジェクトを作成したときに NetworkManager で使用されます。NetworkStartPosition の位置と角度は、新しくプレイヤーオブジェクトを作成したときの生成場所として使用されます。
Network Managerで,Spawn InfoのPlayer Spawn MethodをRound RobinにするとNetworkStartPositionをアタッチしたオブジェクトの位置に順番にプレイヤーが生成されるようになります.
Unity - マニュアル: NetworkStartPosition
Unity - スクリプトリファレンス: NetworkStartPosition
参考サイト
Unity - Multiplayer Networking
Unity - マニュアル: ネットワーキング リファレンス