NetworkVariable の変更点 (1)|書込権限設定の撤廃【Netcode for GameObjects】
検証環境
- Unity 2020.3.20f1
- Netcode for GameObjects 1.0.0-pre.3
以降,Netcode for GameObjects
を NGO
と略します.
MLAPI 0.1.0 時点の NetworkVariable
旧 MLAPI (v12) の記事ではありますが,新 MLAPI (0.1.0) では名前が NetworkVar
から NetworkVariable
に変更されたのみで,
大きな変更点はありませんでした.ただし,NGO から大幅に変更点が発生しています.
NGO の NetworkVariable
NGO
の NetworkVariable
では 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 時代と比べて変更点や制約が大きく発生しているので,たびたび執筆していきます.