だらだら〜個人事業〜

HatenaDiaryから引っ越してきました。Githubもnyakagawanです。

なんか理解が一段階進んだか藻なー

なんかやっとUnityのスクリプトの書き方がわかってきたような…?
今書いている敵スクリプトの場合だと敵のベーススクリプトを作って、敵の種類ごとにベースから派生させて実装をしよう。という感じにやってきた。
でもどうやらそれは間違っている?実装の異なる部分(特化させるところ)は別のスクリプトとして作るのが正解か?特定の派生クラスに依存した処理のため、実行時の型を検出して目的の型にキャストすることがよくある(ダイナミックキャストとか)。この部分をUnityではGetComponent()で(派生クラスに相当する特定スクリプトを)取ってくるのがいいのだろうか?何にしても、継承ー派生で作るとなんか難しいと感じた。つうかGetComponent<>するにはScript名(=クラス名)が必要で、実行時にどのScriptをAddComponentしてるかなんてどっかにテーブル無いと分からないから、そもそもGetComponent<>出来ないのか。そうか、なるほど。
この感じで行くとScriptableObjectの使い方がわかってくる。そしてMonoBehaviourも。例えば敵だとMonoBehaviour継承のEnemyMainと、敵の各挙動を制御するScriptableObject継承のモジュールスクリプト、といった構成になるのだろうか?そしてMonoBehaviourのUpdateとかでモジュールスクリプトの各更新メソッドとかを呼ぶ。少なくともMonoBehaviour継承スクリプトを複数アタッチするのは無駄なように思えるし、実行順を管理出来るか怪しい。
ところで敵やプレイヤーで共通した(実装が重複した)処理が出てきたらどうするか?EnemyMainにそうした処理があるとしてObjectMainというのを作ってEnemyMainはそいつから派生させるのか?今の流れだとそれはNGでObjectMainというスクリプトに抽出して、敵やプレイヤーのオブジェクトにアタッチするのがいいと思われる。でもそれだとBehaviour継承クラスが複数になってしまう。さてどうしたものか…今考えても仕方がない気がする、その時必要純分な対応をすればいいかと。


やっぱりBehaviourが複数あると実行順序が良く解らんな。実行順序が原因と思われるエラーが出た。
ということで次は。上述したBehaviourスクリプトの単一化と、それ以外のスクリプトのScriptable化か。
ところでBehaviour継承クラスをシステムクラスだけに限って、システムクラスに管理されるオブジェクトはシステムのUpdateで読んでやればいいんじゃね?って思ったけど、BehaviourのUpdateをUnityが呼ぶときジョブスケジューリングしてるだろうからやめた方がよさそう、ということを覚えておこう。書いたら忘れない。忘れないはずだ。たぶん。