NetworkVariable の変更点 (2)|unmanaged 制約のため string は利用できない【Netcode for GameObjects】

はじめに

xrdnk.hateblo.jp

こちらの続きのようなもの.

unmanaged 制約

NetworkVariable は NGO 版から unmanaged 制約がつきました.

    [Serializable]
    public class NetworkVariable<T> : NetworkVariableBase where T : unmanaged

ufcpp.net

docs.microsoft.com

つまり,参照型,クラス型は利用できなくなりました.

string は…?

では string はどうするかというと,Unity Collections の FixedString32Bytes を変わりに利用することになります.
FixedString32Bytes は構造体なので NetworkVariable として利用することができます.

docs.unity.cn

Unity Collections は NGO をインストールするときに一緒に入ってきます.

f:id:xrdnk:20211112100303p:plain

以下のようなコードになります.長いけどしゃーないかな….

readonly NetworkVariable<FixedString32Bytes> PlayerName = new NetworkVariable<FixedString32Bytes>(new FixedString32Bytes(""));

ちなみに Unity 2021.2 以降ならば target-typed new expressions が利用できるので,以下のような記法も可能.

readonly NetworkVariable<FixedString32Bytes> PlayerName = new (new FixedString32Bytes(""));

自作の構造体

自作の構造体を NetworkVariable で利用できるようにするためには,INetworkSerializable を実装することになると思います.

xrdnk.hateblo.jp

参考文献

docs-multiplayer.unity3d.com