LoginSignup
4
1

More than 3 years have passed since last update.

64bitのenumはUnityでシリアライズ出来ない

Last updated at Posted at 2019-06-29

TL;DL

// OK シリアライズされる
enum E{}
enum B : byte {}
enum SB : sbyte {}
enum S : short {}
enum US : ushort {}
enum I : int {}
enum UI : uint {}

// シリアライズされない
// Unsupported enum type 'BattlePlayer.Type' used for field 'type' in class 'BattlePlayer'
enum L : long {}
enum UL : ulong {}

説明

64bitのenumはC#ではサポートされていますが、Unityではシリアライズすることが出来ません。
故に、インスペクタで編集したり、シーンやプレハブに含めることも出来ません。

18446744073709551615個も列挙することなんてないだろ!と思われそうですが、問題はフラグとして使いたいときです。
1bitに1要素が入るわけですからlongでも64要素しか扱うことが出来ません。(それでも十分多い?)

解決策

生longとして

long, ulongはシリアライズできるので、キャストしてあげれば使えます。
因みにulongは内部的にはちゃんと0~18446744073709551615までシリアライズされますが、インスペクタ上では符号付数として表示されてしまうので注意が必要です。

インスペクタ拡張などでenumに出したいときはSystem.Enum.GetNameを使うことで、値から名前を逆引きできます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1