2015年3月29日日曜日

【Unity】RTS:かんたいプロジェクト 建造から進水まで


 砲塔と火器管制のスクリプトを書き換えてようやく連動するようになった。妥協によって以前より挙動が単純になり、砲塔が火器管制がリストアップした標的リストから目標を勝手に選んで勝手に攻撃するようになっている。これによって個々の砲塔を集中管理することは難しくなったが、艦船の建造から進水までの負担が小さくなった。
 本日の改善によりとうとう船の設計から実戦までを通して行えるようになった。細かいところはほっぽいてAIの設計に移る。

ほかにも幾つか修正をしてカメラ操作はマウス中ボタンホールドで視点の角度を変えられるようにした。またいずれ砲弾の威力と貫通について調整が必要になるので砲撃をテストするシーンをつくっておいた。

委員会

 新しい試みとしてしばらく前から委員会制度を使っている。これは「(^_^)デザインパターン??」な自分がシーン上で分散していろいろなところで稼働しているスクリプトを集中管理できないかと思って始めたもので、おおまかなタスクごとに委員会を設けその下に仕事を行う複数のマネージャーを置いた縦割り型の仕組みになっている。委員会はシングルトンでマネージャークラスや設定クラスなどの名簿をもっている。他のマネージャを含めたゲームオブジェクトは委員会の名簿を参照することで他のゲームオブジェクトにアクセスできる。
 今回の場合は「艦船建造委員会」と「艦船戦闘委員会」がありそれぞれ艦船の建造と戦闘(ゲームの進行)に責任を負っている。艦船建造委員会の管理下には「建造マネージャ」や「部品マネージャ」などがある。建造マネージャはユーザーアクションに対して部品を生成したり、位置を記録したりする。部品マネージャは建造マネージャの要請に応じて管理している部品群から実際の部品を生成する。委員会とそのマネージャ群は基本的に一つのスクリプトにまとめたほうがいい内容だがわかりやすさを重視してあえて分散させている。
 初期化についても集中管理の方法を試している。AwakeやStartはともするとNullでエラーが起きやすい。いまのところAwakeでは参照するクラスの登録などに処理を限定している。集中管理の方法として初期化のためのInitializeメソッドを設けて委員会管理下のマネージャで順番に各ゲームオブジェクトのInitializeメソッドに点火していくことを考えている。

2015年3月18日水曜日

【Unity】RTS:かんたいプロジェクト 未来位置とマニピュレータ


 火器管制を改造する途中で船の未来位置を計算する必要があったので実装した。これが一筋縄では行かなくて2日もかかってしまった。結局1秒と2秒前の船の直進進路ベクトルと船の位置の遷移ベクトルから船の実際の進路方向ベクトルを割り出して経過時間に応じて現在位置に加算することで未来位置を求めた。上の写真では黄色から赤色までのマルが5〜35秒後の位置を示している。この時点で船は円を描いて周回しいて、航跡と予測位置がほぼ一致しているのが分かる。Bwarsではただ単に車両から伸びる前方ベクトルに速度と時間を掛けた単純なものだったのでこうした苦労は必要なかった。


 艦船設計のマニピュレータも直した。360度どこからでも正確に移動させることができるようになった。またx-z平面に対して並行で動かせるようになった(x,z軸ごとに動かす手間を省ける)。カメラから伸びる線分とx-z平面の交差点を基準にしてマニピュレータが動くようになっている。y軸方向の移動はよくわからない仕組みでうまく動いている。

2015年3月1日日曜日

【Unity】RTS  かんたいプロジェクト 接触の判定


各種モジュールの種類を増やして(砲塔・弾薬庫・エンジン)相互に連関するようにした。これはとても面倒な作業で、モジュール同士の接触判定とその処理を作りなおすことになった。