2017年11月23日木曜日

【Unity】RTSゲーム Bwars2 エフェクトやユニット購入やAI


ささやかなエフェクト―砲火や爆発―を追加した。自分同様慎ましいので誰も気づかないかもしれない。
 セクターから収入が得られるようにして、一定時間ごとに資金に加算されて購入したユニットが戦場に現れる。上の写真でも購入用のUIやセクターごとの情報を表示するUIを確認できる。これは試み的な工夫の一つで比較的長い間隔による更新でRTSにありがちな刻々増える資金に常に注意を払いお金が貯まるやいなや購入コマンドを押す操作を軽減する目的がある。初心者にとって戦場で戦闘の指揮を行いつつ随時ユニットを追加する操作は難しい。この仕組なら一定時間内の好きなときに資金を確認し必要ならユニットを購入することができる。購入実装に伴いAIもユニットが購入できるようにした。
 戦力をセクターに分配するアルゴリズムを新しい理屈に基づいて改善した。セクターへの戦力分配は大まかにセクターの重要度と危険度で決定される。重要度はセクターからの収入や生産施設の有無で変化する。危険度はステップ数に基づくセクター間の経路探索を実装したことで敵セクターまでに経由するセクターとステップ数を調べることが可能になったので、例えば敵セクターとの間に味方セクターを挟む場合は危険度を低下させることができるようになった。実はこれまでセクターの重要度などは与えていたが、これでAIが動的にセクターの価値を測定し戦力を決定できるようになった。
 火器管制システムをGame空間に移管させた。話すと長いしつまらないのでこれは省こう。
 ユニットに属性を設定することを考えている。例えば回避率は戦車であれ装甲車であれ地形別の変化量は同じ傾向になると仮定することができる。そこでこれを属性とすることで各ユニットでは基本回避率と属性を指定するだけで手軽に各地形での回避率を設定することができるだろう。

* エフェクトの強化
    * 火器管制システム
    * セクターUI強化
    * セクター兵站制限によるペナルティ
    * ユニットの生産
    * --------------↑やった↑------------------
    * AI改善
        * セクター戦力分配
        * 地形の効果的な利用
    * ユニット駒モデル
    * LOD
    * 操作性の改善
        * UIの改善
            * ユニット選択
            * ユニット購入
    * ゲームスタート・終了機能
    * アルファ版
    * 経路探索
    * 地形の立体化
    * 射線・視界の判定
    * AIの改善
    * ベータ版
    * 間接・範囲攻撃
    * シナリオイベント

マップを大きくしたら木を描画しきれなくなたのでLODを実装する必要がある。
うまくすれば来年の1月にα版を公開できる。

2017年11月6日月曜日

【Unity】RTS Bwars2 くっつくUI


以前からユニット同士が近いとUIが重なってしまっていて気になっていたので直すことにした。UIが重なっているのか判定する必要があるので四分木とモートン順序を利用して空間分割のアルゴリズムを実装して千コ矩形を置いて重なった矩形を赤く染めて(上の写真)ヤッタヤッタと喜んでいたがUIの整列にはもうひと工夫必要だった。結局重なったUIでグループを作って並べるようにした(下の写真)。


 その仕組み上グループに属して再配置されたUIと一匹狼のUIや他のグループUIは重なってしまうがたぶん問題ない(ほんとかな?)。UIも再デザインした。こうして見るとWargameの横長のUIはうまく出来ているなと思う。ユニット名が長くても表示できるし、プレイされることが多い横長モニタと相性がいい。まねっこになるからまねしないけども。AIも改良し以前に比べ大幅に良くなった。引き続きUIの実装に努める。

2017年10月17日火曜日

【Unity】RTS Bwars2 UIの実装の続き


多少UIのデザインを考えたのでUIの実装をしている。その一環で地形上のセクターの境界に線を引くように改良した。またいくつかユニットの種類も増やした。ユニットの追加はユニットを3Dモデルからイメージに変えたので、もともと動的にデータからユニットを生成する仕組みと相まって比較的容易だ。一方でどうしても3Dモデルの臨場に比べると迫力の無さは否めない。ユニットのイメージは描く予定でいま絵を練習している。この後もう少しUIの実装に努めたところで再度AIの改善に戻るだろう。その前にはユニットや地形などもろもろの設定を一度きちんと決めてやる必要がある。その情報を使ってAIがもう少しマシな判断が下せるように助けるようにしよう。


2017年10月4日水曜日

【Unity】RTS Bwars2 地形とUIの実装の開始

前回行っていたクラスの再編成が完了した。クラス大きく分けてゲームの運用を行うGame空間とゲームの情報から戦術判断を下し命令するAI空間に二分された。両空間は疎結合でAI空間からGame空間に指示を出してユニットを動かすことに成功した。上の写真はAIが指示したユニットの移動先や敵ユニットの予想位置を赤青のシンボルで示している。
 これで一応ゲームは動くので外見上の改善に手を付け始めた。ひとまず旧プロジェクトから回収したコードを使ってマップに木を生やした(同じく上の写真)。次にユニットのシンボルを実装しようと思う。下の写真はイラレで作成したデザインの案だ。



ユニットのシンボルは距離によって変更する予定だ。より近づくとシンボルから具体的な絵や写真に変わる。ひとまず遠目から見たUIを実装して満足しよう。

2017年9月16日土曜日

【Unity】RTSゲーム Bwars2 クラス再編成

戦術AIがユニットの配置とセクターの制御点の占領ができるようになった。これで(一応)ゲームが可能になった。そこでこの機会に現状のクラスを再編成しゲーム運営部分とAIの完全な分離を目指し始めた。クラスは名前空間Game, Agent, AIのいずれかに所属するようになる。Gameはユニットの移動や攻撃の命中判定などゲーム全般の運営を行う。AgentはGame空間からユニットの位置などAIの判断に必要な情報を吸い出してAI空間に渡す。AIは受け取った情報を元に決定を下し、Agent空間に決定事項を伝達する。Agentはその内容をGame空間に命令する。GameとAIの間にAgentをかませるのは将来的にAIは外部アプリケーションに任せてBwarsから完全に独立させようとしているからだ。こうすることで誰でも彼でもAIのカスタマイズが可能になる。この再編成は最高に面倒な作業だ。

2017年9月5日火曜日

【Unity】RTSゲーム Bwars2 戦術AIの実装


 前回各セクターにユニットが配られるようになったのでセクターごとに与えられたユニットに指示を出す戦術AIの実装を始めた。戦術AIは与えられたユニットを効果的に利用し戦闘を有利に進めなければならない。戦術AIの仕事は究極的には1つしかない―ユニットに任意の場所への移動命令を出すことだ。そのためおおまかに2つの演算を行う。1つ目は敵ユニットの位置の予測で、2つ目はその位置に対する効果的な味方の配置場所を計算することだ。1つ目については隣り合うセクターの支配権や実際に確認されている敵に応じて候補地(理想的にはセクター全域が対象となるが演算コストの理由から相当間引いている)にスコアを与えスコアの高い順から敵予想値位置とする。2つ目は味方ユニットの現在位置と移動速度、敵味方の攻撃範囲の内外などの要素から同じくスコアにより移動先位置を決定する。上の写真では敵の予想位置に球体が置かれている。決して現状精度が高いものではない。しかしプロセスは正しいと感じている。ゲームの他の部分との開発と二人三脚でAIもよりましなものに変わっていくだろう。

2017年8月30日水曜日

【Unity】 RTS : Bwars2 ユニットをセクターに送り込む


 前回AIがセクターごとに戦力の配分を決定できるようにしたので、その戦力配分に従い管理するユニットを実際に各セクターに派遣できるようにした。セクター無担当のユニットからセクターが割り当てられていく。戦力配分は随時更新されるので戦力要求に対して過剰なユニットを抱えるセクターはユニットを「クビ」にする。クビになったユニットは別のセクターが割り当てられてそこに向かう(Bwasは優しい世界なのだ)。敵が担当セクターにいる場合は当然戦闘になる。いまのところユニットはセクターの制御点を目指すので戦術も何もないが、これでセクターの奪い合いができるようになった。上の写真は同じセクターで鉢合わせした敵味方のユニットの戦闘の様子を示している。

 上の写真を載せててアレだが、ユニットは3Dモデルでなく絵(シンボル)にしようと考えている。モデルを作るのは大変な手間で1つのモデルを作る間に同じクオリティの絵が10枚はできる。加えてモデルは戦闘時の効果の設定(例えばモデルのどの部位から砲火が生成されるかなど)やアニメーションまで含めると大変厄介だ。もちろんモデルを使用した場合の臨場感・迫力は素晴らしい。でも個人のリソースでは市販のゲームには敵いっこないのだ。また今回はmodの利用を前提にしている。Rimworldなどのmodを見て思ったのはちょいちょいと絵を描いてちょいちょいとxmlを書いてできるような手軽さが理想的と感じた。モデルを利用した場合作るのも読み込む仕組みを作るのもとても手間がかかってしまう。シンボルのデザインはまだ考えていないが多分カメラの距離の応じてシンボルや兵種の表記が変わるようになるだろう。

 現状ではセクターごとの戦力の配分しか決められないので各セクターごとに戦術AIが思考し担当セクターに与えられたユニットを効果的に使えるようにする必要がある。ここはいま仕組みを考えているところだ。話はそれるが考えを練るときにMacではOmni Outlinerを愛用していたがWindowsでは気にいるものが見つからなくて諦めていた。しかしあらためて探したところUV Outlinerという良さそうなソフトが見つかり最近利用し始めた。とても使いやすいソフトだ。