なんか理解が一段階進んだか藻なー
なんかやっとUnityのスクリプトの書き方がわかってきたような…?
今書いている敵スクリプトの場合だと敵のベーススクリプトを作って、敵の種類ごとにベースから派生させて実装をしよう。という感じにやってきた。
でもどうやらそれは間違っている?実装の異なる部分(特化させるところ)は別のスクリプトとして作るのが正解か?特定の派生クラスに依存した処理のため、実行時の型を検出して目的の型にキャストすることがよくある(ダイナミックキャストとか)。この部分をUnityではGetComponent
この感じで行くとScriptableObjectの使い方がわかってくる。そしてMonoBehaviourも。例えば敵だとMonoBehaviour継承のEnemyMainと、敵の各挙動を制御するScriptableObject継承のモジュールスクリプト、といった構成になるのだろうか?そしてMonoBehaviourのUpdateとかでモジュールスクリプトの各更新メソッドとかを呼ぶ。少なくともMonoBehaviour継承スクリプトを複数アタッチするのは無駄なように思えるし、実行順を管理出来るか怪しい。
ところで敵やプレイヤーで共通した(実装が重複した)処理が出てきたらどうするか?EnemyMainにそうした処理があるとしてObjectMainというのを作ってEnemyMainはそいつから派生させるのか?今の流れだとそれはNGでObjectMainというスクリプトに抽出して、敵やプレイヤーのオブジェクトにアタッチするのがいいと思われる。でもそれだとBehaviour継承クラスが複数になってしまう。さてどうしたものか…今考えても仕方がない気がする、その時必要純分な対応をすればいいかと。
やっぱりBehaviourが複数あると実行順序が良く解らんな。実行順序が原因と思われるエラーが出た。
ということで次は。上述したBehaviourスクリプトの単一化と、それ以外のスクリプトのScriptable化か。
ところでBehaviour継承クラスをシステムクラスだけに限って、システムクラスに管理されるオブジェクトはシステムのUpdateで読んでやればいいんじゃね?って思ったけど、BehaviourのUpdateをUnityが呼ぶときジョブスケジューリングしてるだろうからやめた方がよさそう、ということを覚えておこう。書いたら忘れない。忘れないはずだ。たぶん。