ペンギンとザリガニ

自分用のノートです。まとまりありません。主にUnity。

【C#】プロパティの誤植で再帰の無限ループが発生してクラッシュ

テストプレイ中にUnityエディタが特定のタイミングでクラッシュする。
位置を特定すると、あるゲームオブジェクトをInstantiate()、AddComponent<>()して、
そのコンポーネントのプロパティにアクセスしたところでクラッシュするらしい。

コードをよく見るとこんなことになっていた。

    public class DropItem : MonoBehaviour
    {
        private ItemData itemData;

        public ItemData ItemData => ItemData;
}

ItemData => itemData
と書くべき右片を間違えて大文字にしていた。
これが自分自身を無限に呼び出すgetterになってしまったのがクラッシュの原因だった。
もう少し変数名を工夫したほうがいいが、接頭辞はきもちがわるいから使いたくない。
_itemDataみたいなアンダーバーを活用してみようか?
接頭辞でpとか付ける記法とどう違うかというと気分の問題だが。
あるいは単にdataとか。

これぐらいはコンパイルエラーにしてくれくれたら助かるんだけど、世知辛い。
それにUnityって無限ループに入ったらヒントもスタックトレースの出力もなく落ちるんですね。困る。
Editor.log以外に何かログはあるのかな?