tanaka's Programming Memo

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

Unity5.1 ネットワークシステム:シングルプレイヤーゲームを多人数に対応させる

前へ | 次へ

UNet Unity5.1からの新しいネットワークシステム
Unity5.1のネットワークマニュアル斜め読み(2)
UNet NetworkManagerの利用
Unity5.1 ネットワークシステムのオブジェクト生成
Unity5.1 ネットワークシステムの状態同期
Unity5.1 ネットワークシステムのRemote Actions
Unity5.1 ネットワークシステム PlayerObjects
Unity5.1 ネットワークシステム Object Visibility
Unity5.1 ネットワークシステム Network Messages
Unity5.1 ネットワークシステム Matchmaker
Unity5.1 ネットワークシステム Scene Objects
Unity5.1 ネットワークシステム:シングルプレイヤーゲームを多人数に対応させる
Unity5.1 ネットワークシステム Multiplayer Lobby
Unity5.1 ネットワークシステム Network Clients and Servers
Unity5.1 ネットワークリファレンス概要

公式サイトの以下のページの斜め読みメモです。
Unity - マニュアル: Converting a Single Player Game to Multiplayer

Converting a Single Player Game to Multiplayer

ここでは(Unity5.1の)新ネットワークシステムを使って、シングルプレイヤーゲームを多人数に対応させる手順を紹介します。ここで示す手順は簡易なものなので、実際のゲームの高度な手順やあらゆる種類のゲームに完全に対応できる訳ではありませんが、基本的な手順の手引きにはなります。

NetwormManagerを設定する

  • シーンに新しいゲームオブジェクトを追加して、名前を"NetworkManager"にする
  • 作成した新しいゲームオブジェクトにNetworkManagerコンポーネントを追加する
  • NetworkManagerHUDコンポーネントも追加する。これにより、ネットワークゲームの状態を操作する簡易なUIが提供される

詳しい使い方はNetworkManagerを参照。

プレイヤープレハブを設定する

  • ゲームからプレイヤーのためのプレハブを探すか、プレイヤーオブジェクトからプレハブを作成
  • プレイヤープレハブにNetworkIdentityコンポーネントを追加する
  • NetworkIdentityコンポーネントのLocalPlayerAuthority欄にチェックを入れる
  • NetworkManagerの"Spawn Info"セクションのplayer prefab欄に、プレイヤー用のプレハブをドラッグ&ドロップする
  • シーンにプレイヤーオブジェクトが存在していたら削除する

参照:Player Objects

プレイヤーの操作

  • プレイヤープレハブにNetworkTransformコンポーネントを追加
  • isLocalPlayerフラグが設定されている時だけ、操作ができるようにする
  • カメラをisLocalPlayerが設定されている生成されたプレイヤーに固定する
  • (void Start()関数は、OnStartLocalPlayer()の後に実行される可能性があるので処理の順番に注意)

以下、公式サイトの例です。入力をisLocalPlayerに対応させる部分のみ例示しています。

using UnityEngine;
using UnityEngine.Networking;

public class Controls : NetworkBehaviour
{
    void Update()
    {
        if (!isLocalPlayer)
        {
            // exit from update if this is not the local player(自分が操作しているプレイヤーではない場合は更新処理をキャンセル)
            return;
        }

        // handle player input for movement(プレイヤーを操作する処理を以下に続ける)
    }
}

基本的なプレイヤーのゲーム状態

  • 新しいスクリプトをNetworkBehaviourを継承して作成して、重要なデータを持たせる。MonoBehaviourではないので注意
  • (同期させたい)重要なメンバー変数をSyncVarにする

参照:State Synchronization.

ネットワークアクション

  • 重要なアクションのためのスクリプトをMonoBehaviourではなく、NetworkBehaviourを継承して作成
  • 更新処理で、重要なプレイヤーのアクションをCommandsを使って実装する

参照:Networked Actions.

プレイヤー以外のオブジェクト

敵などのプレイヤーが操作しないプレハブの対応をします。

  • NetworkIdentityコンポーネントを追加
  • NetworkTransformコンポーネントを追加
  • NetworkManagerのspawnable prefabs欄に登録する
  • ゲーム状態とアクションで更新処理を実装する

Spawners

  • オブジェクトを登場させるスクリプト(Spawner)をNetworkBehaviourに変更する
  • isServerプロパティーやOnStartServer()関数を用いて、Spawnerをサーバー上でのみ動作するようにする
  • NetworkServer.Spawn()を呼び出して、オブジェクトを生成する

プレイヤーを登場させる場所(Spawn Positions for players)

  • 新しいゲームオブジェクトを作成して、プレイヤーが登場する場所に配置
  • NetworkStartPositionコンポーネントを追加

ロビー(Lobby)

  • ロビーシーンを作成
  • multiplayer-lobbyパッケージをインポートする
  • GuiLobbyManagerプレハブをシーンに追加
  • マネージャーを設定する
    • Scenes
    • Prefabs
    • spawners


前へ | 次へ