はじめに
クラスの中に自身のクラスを定義しようと思ったらエラーが起きたので
試行錯誤の末に発見したその解決策を紹介
エラー例
hoge.cs
public class hoge{
public hoge _hoge;
public string hage;
}
これをもし成功できたとしてunity のインスペクタなどで表示すれば
無限ループになってしまうことが容易に伺えます
※だからこそエラーが起きたと思われますが
そこを強引に解決するために継承を利用します
継承についてよくわからない人は以下の記事を参照してください
解決策
hoges.cs
public class hoges:hoge{
}
public class hoge{
public hoges _hoges;
public string hage;
}
定義したいクラスを継承した空クラスを別の場所に用意して
メインクラス内にそのクラス名を定義すれば無事解決します。
注意事項(インスペクタ上で変数を管理したいとき)
unityの場合はmonobehaviorを継承していないとインスペクタには表示されないので
各クラスの先頭にこれをつけることを忘れずに
[System.Serializable]
そしてやはりメインクラスにはmonobehaviorを継承する必要があります
大規模なクラスの場合はこのような方法があることを頭の片隅に
おけばどこかの場面で使えるかもしれません
実際の自分の実用例
interaction.cs
[System.Serializable]
public class interactionsuceess:interaction{
}
[System.Serializable]
public class interaction
{public interactionsuceess interactionsuceess;
}
using UnityEngine;
public class interactionenter : MonoBehaviour
{
public interaction firstinteraction;
}