砲塔と火器管制のスクリプトを書き換えてようやく連動するようになった。妥協によって以前より挙動が単純になり、砲塔が火器管制がリストアップした標的リストから目標を勝手に選んで勝手に攻撃するようになっている。これによって個々の砲塔を集中管理することは難しくなったが、艦船の建造から進水までの負担が小さくなった。
本日の改善によりとうとう船の設計から実戦までを通して行えるようになった。細かいところはほっぽいてAIの設計に移る。
委員会
新しい試みとしてしばらく前から委員会制度を使っている。これは「(^_^)デザインパターン??」な自分がシーン上で分散していろいろなところで稼働しているスクリプトを集中管理できないかと思って始めたもので、おおまかなタスクごとに委員会を設けその下に仕事を行う複数のマネージャーを置いた縦割り型の仕組みになっている。委員会はシングルトンでマネージャークラスや設定クラスなどの名簿をもっている。他のマネージャを含めたゲームオブジェクトは委員会の名簿を参照することで他のゲームオブジェクトにアクセスできる。
今回の場合は「艦船建造委員会」と「艦船戦闘委員会」がありそれぞれ艦船の建造と戦闘(ゲームの進行)に責任を負っている。艦船建造委員会の管理下には「建造マネージャ」や「部品マネージャ」などがある。建造マネージャはユーザーアクションに対して部品を生成したり、位置を記録したりする。部品マネージャは建造マネージャの要請に応じて管理している部品群から実際の部品を生成する。委員会とそのマネージャ群は基本的に一つのスクリプトにまとめたほうがいい内容だがわかりやすさを重視してあえて分散させている。
初期化についても集中管理の方法を試している。AwakeやStartはともするとNullでエラーが起きやすい。いまのところAwakeでは参照するクラスの登録などに処理を限定している。集中管理の方法として初期化のためのInitializeメソッドを設けて委員会管理下のマネージャで順番に各ゲームオブジェクトのInitializeメソッドに点火していくことを考えている。
2 件のコメント:
ゲーム作り頑張ってください!
ありがとうございます〜。がんばります!
コメントを投稿