渋谷ほととぎす通信

完全趣味でやってる技術メモ。※所属団体とは一切関係がありません。

Unityエラー「The same field name is serialized multiple times in the class or its parent class」の対処


f:id:esakun:20150730215258g:plain:w450

The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(MonoBehaviour) _hoge UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

エディタで実行中は問題なかったのですが、Android向けにビルドすると上記のエラーが出てしまったので対処してみます。

親子クラス内で同名シリアライズ指定するとダメ

C#という視点から見ると、親クラス、サブクラスで同名private変数を持つことは何ら問題はないのですが、Unity的な視点で見るとSerializeFieldアトリビュートをつけてしまうとよろしくありません。

// 親クラス
class Parent : MonoBehaviour
{
    [SerializeField] int _hoge;
}


// 子クラス
class Child : Parent
{
    [SerializeField] int _hoge;
}

上記のような状態はUnityはサポートしていないということです。

エラー個所を特定する

エラー文の中にThis is not supported: Base(MonoBehaviour) _hogeとフィールド名_hogeが犯人だということを教えてくれるので、全文検索してそれっぽい箇所を修正すれば良いかと思います。

以上