見出し画像

移動範囲と経路探索のお話/ナナツキ戦記 進捗(2)

こんにちは「つけらっとゲームス」プログラム担当のとちです。
以前からお知らせしている「ナナツキ戦記」の開発について、2023年5月31日現在の進捗報告です。

前回の5月10日の進捗報告は以下の記事をご覧ください。

拠点での政略コマンド

前回に引き続き、政略コマンドに少々手を入れました。
まずはスクリーンショットを見ていただきまして、

政略画面 トップメニュー
情報ボタンを押すとこんな感じ

キャラクターが画面に配置されていますね。
左側の黒猫「ユーニ」と、右側の天使「クエラエル」はプレイヤーを導く立場のキャラクターです。勢力の状況をみて色々とアドバイスしてくれます。
(※キャラクターデザインは「もなか」が担当しています)

移動範囲の明示

マップ上にいるキャラクター(ユニット)を選択すると、そのユニットが移動できる範囲を表示します。
基本的に整備された道は歩きやすく、森や山は歩くのが遅くなる。1度に動ける量はユニットにスタックしているキャラクターの移動適性で変化します。

前述通り、森や山は歩くのが遅くなりますが障害物があって防衛しやすい。というわけでSRPGやSLGではお馴染みの地形効果が高くなります。そのへんをうまい具合に使って戦ってほしいです。

技術的なお話

ここからは少し技術的なお話になります。
移動範囲や移動経路をプログラムで作る際のお話。
わたしは以前ウディタでフェアリーズエメラルドというファイアーエムブレムライクなフリーゲームを作っていました。こんなのです(↓)

フェアリーズエメラルド スクリーンショット

当時、ウディタでSRPGを作ろうと思っていた方は少数ながらいらっしゃったようで相談を受けたり、当時の日記ブログを参考にしていた方もいたようです。SRPG向けのツールを使えばそれほど苦労しない部分なのですが、アルゴリズムを最初から考えるとなると、頭がむず痒くなりますよね……

今回ウディタで動かしていたフェアリーズエメラルドのアルゴリズムを、Unityで動かすべく色々やってみました。その時のメモ書きです。
おそらく移動範囲や移動経路の考え方としては稚拙な部類に入ると思いますが、もし「1から作ってやろう」という方がいれば少しは参考になるかもです。

前提条件

・各ユニットの最大移動力は[7]マスとする
・スタックしている場合、最も移動力の低いユニットに基準を合わせる
・スタックしている場合、最も移動適性の低いユニットに基準を合わせる

処理の流れ

・クリック位置にユニットがあった場合に処理を開始する
・ユニット(スタック)の移動力と移動適性をすべて取得する
・移動力と移動適性の最も低いユニットを基準とする
・クリック位置を中心とした上下左右、最大7マスの配列を準備する
(つまり、15,15の二次元配列が必要となる)
・準備する配列は「マップ座標」「移動コスト」「残り移動力」配列とする

もう頭がグチャグチャになってきましたよね。わたしもです。

処理の第一段階

ようするに、ココまでの処理は……クリックした点を中心として、そこから右回りに全部のマス目の「ワールド座標」「移動できる範囲」「地形(移動コスト)」を配列に取得しちゃえって話です。右回りに一周したら1マスだけ外側に移動して再度一周します。それを繰り返します。

処理の第二段階

移動力がわかったんだから、地形のコストを引き算していきましょう。
処理の順番はさっきと同じ中心から右回りに、徐々に外側へです。
順番はずっと同じです。プログラム的にループ文を使いまわしできますし、特に別の作業でもしない限り「ずーーーっと右回り」「内側から外側へ」!

処理の第三段階

移動範囲がわかったので画面表示します。画面表示した結果プレイヤーが移動したい場所をクリックしたとしましょう。
図の例で行くと右上の「0」のマスをクリックしたようです。
その場合「どうやってキャラクターは動くのか?」という処理です。

うーん、伝わりますかね?

以前、このへんの技術的なツイートをしたのですが、これよりは丁寧に説明したつもりです……

頭の中で完結してパタパタとキーボードを叩ける方も世の中にはいらっしゃると思いますが、わたしは頭が不器用なのか無理、こうやって図に書かないと自分で考えていることなのに納得できないんですよ。

というわけで、今回はここまで、
これからも頑張って開発進めます。応援よろしくおねがいします。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?