同期処理以外の初期化処理どうしようかなと
spawnするときにチーム設定、マテリアル設定など変更が必要なのでタイミングをみたら。
チーム設定自体は
NetworkVariableで同期できるかなと
しかしデータ変更ハンドラーをどのタイミングで入れたら良いのか?と
Page Not Found | Unity Multiplayer Networking
これを見ると
// 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オブジェクトの中をごにょごにょしています。
こんな感じでやりたいことはできました。
コメント