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

Technology

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

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

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

お気軽にコメントください!

スパム対応のためコメント認証に数日かかることがありますが、お気軽にコメントいただけると嬉しいです^^

コメント

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