私はここでゲームに取り組んでおり、このかなり興味深いバグを見つけました。次の列挙型があるとします。
public enum ItemType
{
Food,
Weapon,
Tools,
Written,
Misc
};
基本クラス
public class BaseItem
{
public string Name = "Default Name";
public ItemType Type = ItemType.Misc;
}
およびその 2 つのインスタンス:
Ins1 = new BaseItem
{
Name = "Something",
Type = ItemType.Food
};
Ins2 = new BaseItem
{
Name = "Something too",
Type = ItemType.Tools
}
これが私に起こったことです: コンストラクターでタイプを Food にしたいことを指定したにもかかわらず、最初のインスタンスのタイプは基本クラスで事前に初期化されたままになります。2 番目のインスタンスのタイプは、Tools に正しく設定されます。
IF、次のような新しい列挙値 BEFORE Food を追加しました。
public enum ItemType
{
Nothing,
Food,
Weapon,
Tools,
Written,
Misc
};
次に、最初のインスタンスのタイプは、予想どおり Food になります。2 番目のインスタンスのタイプも正しいでしょう。
この動作の原因は何ですか? 簡単に説明すると、コンストラクターで Type が列挙型の最初の値に設定されたすべてのインスタンスは、実際には BaseItem 定義にあった値に戻ります。最初の列挙値の前に余分な値を追加すると、明らかに問題が解決しました。しかし、それは間違っているので、何が問題を引き起こしたのか知りたいです。
ありがとう!
--- 後で編集 --- これが役立つ場合: BaseItem 内の「Type」フィールドに初期化を行わず、中括弧コンストラクターのみを残して初期化を行うと、列挙型に「Nothing」値を追加しなくてもすべて正常に機能します。 .
これにつきましては申し訳ございません; さらに掘り下げた後、それは Unity のみのバグのようです。他の何人かの人々もそれに遭遇しました。問題は解決しました。誰もが私から投票を受け取り、私自身の回答を追加します。他の Unity ユーザーが見つけてくれるかもしれません。ご協力とご関心をお寄せいただきありがとうございます。