Unity Netcode spawnされたobjectをclient側で処理する

Technology

同期処理以外の初期化処理どうしようかなと

spawnするときにチーム設定、マテリアル設定など変更が必要なのでタイミングをみたら。

チーム設定自体は

NetworkVariableで同期できるかなと

しかしデータ変更ハンドラーをどのタイミングで入れたら良いのか?と

Migrating From UNet to Netcode for GameObjects | Unity Multiplayer Networking
Use this step-by-step guide to migrate your projects from Unity UNet to Netcode for GameObjects (Netcode) Sample code is provided as available. We also recommen...

これを見ると

// 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オブジェクトの中をごにょごにょしています。

こんな感じでやりたいことはできました。

コメント

タイトルとURLをコピーしました