SerializeFieldのデフォルトはnullであってnullでない

Unityのエディタ上でAssetを選択するとInspector上にD&Dで設定できるObjectFieldがある。
publicに指定したり、SerializeFieldなどのAttributeを記述するとInspector上に出現し、指定の型に合ったAssetの参照を関連付けすることができるおなじみの仕組み。

ここに何も指定していなかった場合の対応策として null合体演算子 という条件演算子がある。
これで判定して対応しようとすると上手く動かない。

Ad

    [SerializeField]Material m_material;
    Material material{
        get{
            this.m_material = this.m_material ?? GetComponent<Renderer>().material;
            return this.m_material;
        }
        set{this.m_material = value;}
    }

materialに何も指定しないままアクセスすると以下の様なエラーメッセージが出現する。

UnassignedReferenceException: The variable m_material of MaterialEmissionChanger has not been assigned.
You probably need to assign the m_material variable of the MaterialEmissionChanger script in the inspector.

三項演算子を使うと動く。

    [SerializeField]Material m_material;
    Material material{
        get{
            this.m_material = this.m_material == null ? GetComponent<Renderer>().material : this.m_material;
            return this.m_material;
        }
        set{this.m_material = value;}
    }

SerializeFieldのデフォルトの値に何が入っているのか不明だが、なにかわかったら追記をする。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です