NetworkVariable の変更点 (1)|書込権限設定の撤廃【Netcode for GameObjects】

検証環境

  • Unity 2020.3.20f1
  • Netcode for GameObjects 1.0.0-pre.3

以降,Netcode for GameObjectsNGO と略します.

MLAPI 0.1.0 時点の NetworkVariable

xrdnk.hateblo.jp

旧 MLAPI (v12) の記事ではありますが,新 MLAPI (0.1.0) では名前が NetworkVar から NetworkVariable に変更されたのみで,
大きな変更点はありませんでした.ただし,NGO から大幅に変更点が発生しています.

NGO の NetworkVariable

NGONetworkVariable では NetworkVariableSettings が撤廃されました.
そのため,NetworkVariable の初期設定を行う際は宣言方法が変わっています.

旧 NetworkVariable の初期設定 (書込権限と初期値のみ設定)

        readonly NetworkVariableInt _idNetVar = new NetworkVariableInt
            (new NetworkVariableSettings{WritePermission = NetworkVariablePermission.OwnerOnly}, -1);

新 NetworkVariable の初期設定

        readonly NetworkVariable<int> _idNetVar = new NetworkVariable<int>(-1);

書込権限設定が撤廃され,書込権限を持つのは Server のみになりました.
つまり NetworkVariable.Value プロパティで値設定を行う際は Client 側では変更できないため,
Client 側は Server 側に逐一 Server RPC を使って NetworkVariable の値更新を行う必要があります.

サンプルとしては以下のような感じですね.

        public void SetAvatarId(int avatarId)
        {
            UpdateIdNetVarServerRpc(avatarId);
        }

        [ServerRpc(RequireOwnership = false)]
        void UpdateIdNetVarServerRpc(int avatarId) => _idNetVar.Value = avatarId;

おわりに

執筆段階の NGO の NetworkVariable のドキュメントは実は古い(新 MLAPI の記述のまま) ので注意してください.
NGO は 新 MLAPI 時代と比べて変更点や制約が大きく発生しているので,たびたび執筆していきます.