なが月・23日目

23日目

 

VR制作を今月中に一区切りつけるため、今日は一日中Unityと向き合っていた。

車のスポーン地点ごとに同じものを取り付ける上、Instantiateの方向をインスペクタ上で入力しなければならず、また2種類しかスポーンさせられなかったひどい過去のコードを書き直したが、内部クラスの継承で尋常ならざる苦労をした。

結論から言えば、「インスペクタからネストしたプロパティを設定したい場合には継承してはならず、継承したければインスペクタから設定することはあきらめなければならない」ということ、また実験結果として「MonoBehaviourを継承した親クラス(xxx.csならばpublic class xxx : MonoBehaviour)を継承した内部クラスを定義するとUnityはNo MonoBehaviourとみなしアタッチできなくなり、MonoBehaviourを直接継承した内部クラスを定義するとアタッチできる」ということが判明した。しかしながら、この挙動がいかなる言語仕様に基づいているのか理解することはできなかった。この件に何時間も悩み、胃痛を感じながら最終的に回避策をなんとかひねり出した。

内部クラスのインスタンス内でInvokeRepeatingを実行できない(MonoBehaviourを継承できないため)代わりに、親クラス内でwhile無限ループ+yield return WaitForSecondsのコルーチンを実行し、子クラスのインスタンスメソッドを定期的に呼ぶようにしたのであるが、果たしてこれでよかったのかはわからない。明日は他のがんばりを行いつつ、Unityに取り組む時間を多めにして目的地指定をよりクリーンなやり方で実現することを試みる。