++目的
プレイヤーのHPなどのステータスをユーザーが設定してからネットワーク対戦をするゲームにおいて、その設定を共有する
++方法
SyncBarを使う
SyncVar の状態は、OnStartClient() が呼び出される前にクライアント上のゲームオブジェクトに適用される。
設定を持つスクリプトのコンポーネントをBattleSettingとする。
BattleSettingはDontDestroyOnloadでシーン変更時に破壊されないようにする。SettingのパラメータにはSyncVarを付与し、クラスにはNetworkBehaiorを継承する。
最初にホストのユーザーがパラメータを決定するので、ホストユーザー接続時にOnServerReadyで設定したパラメータを[Command]でBattleSettingにセットする。
あとは、プレイヤーなどにセットしたスクリプトのStart()でBattleSettingからパラメータを取得して設定を行えばOK
++コード
BattleSetting---
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; //SyncVar の状態は、OnStartClient() が呼び出される前にクライアント上のゲームオブジェクトに適用されます public class BattleSetting : NetworkBehaviour { [SyncVar] public int MaxHP; [SyncVar] public int MaxMP; void Start(){ DontDestroyOnLoad(this); } [Command] public void CmdSyncBattleSetting(int hp,int mp){ MaxHP = hp; MaxMP = mp; } }
NetworkManager---
public override void OnServerReady(NetworkConnection conn){ print("OnServerReady"); base.OnServerReady(conn); ConnectCount += 1; Debug.Log(ConnectCount); if(ConnectCount == 1){ m_BattleSetting.CmdSyncBattleSetting(int.Parse(HPText.text),int.Parse(MPText.text)); } if(ConnectCount == 2){ StartCoroutine("ColServerChangeScene"); } }
PlayerSetup---
void Start(){ if(isLocalPlayer){ var bs = GameObject.Find("BattleSetting").GetComponent(); var pbi = GetComponent (); pbi.SetParams(bs.MaxHP,bs.MaxMP); }