同期処理以外の初期化処理どうしようかなと
spawnするときにチーム設定、マテリアル設定など変更が必要なのでタイミングをみたら。
チーム設定自体は
NetworkVariableで同期できるかなと
しかしデータ変更ハンドラーをどのタイミングで入れたら良いのか?と
Page Not Found | Unity Multiplayer
これを見ると
// Call this is in Awake or Start to subscribe to changes of the NetworkList.
void ListenChanges()
{
m_ints.OnListChanged += OnIntChanged;
}と書いてあるので AwakeでもStartでもOnValueChangedに設定できるようです。
サンプルは NetworkListなので OnListChangedになっています.
サーバー側でspawnしたあと、タイミングが ずれると嫌なので ハンドラーを設定した後に
NetworkVariable<int> team = new NetworkVariable<int>();
void Start()
{
Debug.Log("client start");
team.OnValueChanged += OnTeamChanged;
if (IsServer)
{ // サーバーからnetworkvariableを変更
team.Value = core.Team;
}
}
private void OnTeamChanged(int previousValue, int newValue)
{
if (!IsServer && IsClient)
{
Debug.Log("onTeamChanged");
// サーバー側ではspawn時に設定をしているので clientのみここで設定する
}
}サーバー側はSpawnするときにcoreオブジェクトの中をごにょごにょしています。
こんな感じでやりたいことはできました。



コメント