Unityのエディタ上でAssetを選択するとInspector上にD&Dで設定できるObjectFieldがある。
publicに指定したり、SerializeFieldなどのAttributeを記述するとInspector上に出現し、指定の型に合ったAssetの参照を関連付けすることができるおなじみの仕組み。
ここに何も指定していなかった場合の対応策として null合体演算子
という条件演算子がある。
これで判定して対応しようとすると上手く動かない。
[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のデフォルトの値に何が入っているのか不明だが、なにかわかったら追記をする。