投稿記事

籠城ゲームの記事 (98)

竹林ソフト 2023/10/31 20:00

ねこ巫女籠城ゲーム開発(敵の侵攻経路を修正する)

気持ちを新たに開発していきます。合言葉は「やりたくないタスクから着手する」です。この方針でだいたい問題ないです。

やること

建物ごとに移動時に使うメッシュを定義して高さも求められるようになったので、これを使って敵の侵攻経路を求めます。具体的には、このメッシュを縦横斜めに移動したときの移動コストを事前に計算して敵の侵攻経路を求める際の A* アルゴリズムで利用できるようにします。

やったこと

ほとんどの内容がコーディングなので省略しますが、箇条書きで書くと

  • メッシュの移動コストを事前に計算する
  • 計算した移動コストが A* アルゴリズムで使われるようにする

です。
そして、動作結果はこれです。

今回の処理を実装する前は敵は建物を素通りしていたのが、壁を避けるようになりました。大変よいです。

今のままの実装だと上から見て建物 A の北東の隅と建物 B の南西の隅が接しているような場合にも敵が斜めの経路を移動しようとしてしまうのですが、そのあたりはまた後で修正します。

まとめと今後の予定

気が重くて数週間くらい未着手だった処理が実装できて動作もしたので大変良いです。
引き続き、ゲームとして遊べるようにするための機能から実装していこうと思います。がんばります。

竹林ソフト 2023/10/24 20:00

ねこ巫女籠城ゲーム開発(UI 素材の購入と適用)

Booth にて ゲームUIセット vol.19 を購入したので適用していきます。私はデザインセンスのなさには自信があるので、基本的にサンプルのデザインをそのまま使っていきます。

やったこと

タイトルシーン

↓UI を適用したもの

メニューボタン、設定パネル、設定パネルのタブボタンに UI 素材を適用しました。ボタンの中の文字列が日本語になるようにする作業は後でやります。

イベントシーンへの UI 素材の適用

↓UI を適用したもの

フレーム、名前、メッセージ、入力待ちアイコン、早送り用のボタンに UI 素材を適用しました。設定パネル内の UI コンポーネントの配置はまだです。

これがノベルゲーなら履歴やオート再生の機能も実装すべきだと思うのですが、イベントシーンがメインでないゲームなのでとりあえず履歴機能などは実装しないことにします。

ゲームシーンへの UI 素材の適用

まだ仕様を決めてなくて色々と変わると思うので、もう少し後で適用します。

まとめと今後の予定

メイン機能の開発に着手する元気がなかったので、UI 素材を購入して見た目の調整を行いました。
見た目の調整はゲームとして遊べるようにするという意味では開発が進んでないのですが、どうしても実装に着手できないときにやる作業としてはありです。「何かした」という気持ちと「前よりよくなった」という満足感は得られます。

次回こそは、ゲームとして遊ぶための機能の実装に着手したいです。がんばります。

竹林ソフト 2023/10/17 20:00

ねこ巫女籠城ゲーム開発(ワーカーの建築の仕様決め)

「ここに建築してね」という建築指示を即座に反映させる建築処理は動作したので、次はワーカーが建築指示の場所に資材を運んで時間をかけて建築するあたりの検討を行います。ただ、資源を誰がどう運ぶかの仕様は決めきれていないので、今回は建築に使う資材は必要に応じて急に発生することにします。

実装したいこと

簡単に説明すると Factorio というゲームで、自キャラの建築ロボットが範囲内にある建築予定の建物を一斉に建築していくようなことをしたいです。

必要な処理としては

  • 操作キャラの範囲内にある建築予定の建物、地形を取得する。
  • 資源の搬入元を決める(今回は省略する)
  • 召喚したワーカーに資源の搬入先、建築作業先を割り振る。
    • ワーカーを制御する。

です。
ここまでで、間違いなく実装が小難しいのがわかります。

実装すること

最初に地形の編集のみを検討していきます。地面の整地が終わってから建物を建てないと建物が地面に埋まったりと色々おかしくなるからです。整地が先、建築は後、です。

操作キャラの範囲内にある地形の取得

これは、すでに建築済みと建築予定の情報を分けて管理しているので、そこから取得すればオッケーです。

資源の搬入元を決める

小難しい実装は省略しますが、地形についての処理を書き出してみると

  • 地面を高くするときには、土資源を使う。
  • 地面を低くするときには、土資源が発生する。

です。
これは、城郭作成における「堀を作るときの土資源を土塁を作るのに使う」というあたりを表現したいためです。
ここまでで

  • フィールドには資源を置ける。1つのタイルに資源を複数置けるかは決めてない。
  • ワーカーは資源を持って運べる。
  • 土資源を持っているワーカーは、盛土の作業をして地面の高さを上げられる。
  • 資源を持ってないワーカーは、掘削の作業をして地面の高さを下げて土資源を得られる。

という仕様になります。
このあたりを実装するにあたって、ワーカーとフィールド上の資源もセーブデータに含まれるようにする必要がありそうです。

とりあえず、召喚ワーカーが目的位置に移動して労働(一定の時間が経過)したら地面の高さが変わるあたりまでを実現したいです。

ワーカーについて

ワーカーには大きく2種類を予定していて「住民ワーカー」と「召喚ワーカー」です。
Factorio を例に説明すると、それぞれ「ロボットステーションの建築ロボット」と「携帯ロボットステーションの建築ロボット」です。

住民ワーカー

住民ワーカーは VRoid Studio で作ったモデルに和服を着せたものにします。衣装は Booth で売ってた 【VRoid衣装セット】ねこ着物 を使います。

↓衣装を適用して既存の巫女モデルと並べたもの

並べてみると既存の巫女モデルは顔が大きくなるように調整してたのがわかります。(忘れてました)後で住民ワーカーにもデフォルメ設定を追加します。

召喚ワーカー

こっちは「木製のからくり」っぽさを出そうと思っていて、Unity Asset Store で Bat Bots というアセットを購入しました。

↓ Bad Bots のストアページより

これのテクスチャを木製のものにしたり、弓矢や火縄銃を取り付けて利用したいと思っているのですが、また後でやります。

まとめと今後の予定

とりあえず、ワーカーの動作を書き出しました。大変よいです。
あと、今は建築モードでないときには、建築予定の建物が全く表示されないのですが、他の多くのゲームと同様に半透明で表示してもいいかなと思い始めました。もう少し考えてから実装します。
次回になるかは未定ですが、ワーカーによる建築も実装していきます。がんばります。

竹林ソフト 2023/10/10 20:00

ねこ巫女籠城ゲーム開発(移動用メッシュの高さを取得する)

前回まででユニットが壁などを乗り越えるときに使う移動メッシュを定義したので、今回はそれから移動コストを予め計算するあたりに着手します。

やること

ユニットが移動するメッシュの高低差を元に、タイルの8方向の移動コストを計算します。

↓移動方向とメッシュの例

今回はこのメッシュの高さを利用できるようにします。

実装したこと

メッシュの高さを求める

そしてメッシュの頂点の座標から高さを計算して利用するつもりだったのですが、メッシュの種類が現時点で3つと少ないので、このタイルごとのメッシュを 20x20 分割した格子ごとの高さを予め計算しておいて利用することにします。

決まった位置のメッシュの高さを求めるだけなので、Collider を付与して Raycast で高さを求めて、その値を配列に保存しておいて使うことにしました。

↓Raycast でメッシュの高さを取得するコード

よいです。

メッシュが建物のどのタイルで使われるかを割り当てる

このメッシュはフィールドのタイル単位の大きさなので、建物は「この場所にはこのメッシュをこの角度で」という風に指定して利用します。そして、この割り当てを計算するあたりまでを実装しました。

↓建物の角度を変えながらメッシュを重ね合わせて描画してみた様子

適切に動作しているのがわかります。よいです。

まとめと今後の予定

メッシュの高さを計算で求めようとして「思ってたより難しいな」と悩んでいましたが、割り切って Raycast で高さを取得するようにしました。開発が進んで大変よいです。
次回は、この利用できるようになった高さから A* アルゴリズム用で使う移動コストの計算をするか、気分転換に見た目まわりの作業に着手します。がんばります。

竹林ソフト 2023/10/03 20:00

ねこ巫女籠城ゲーム開発(敵が建物を乗り越える移動で使う起伏を定義する)

敵の侵攻経路の調整をします。今は地面の傾斜とか建物の有無をガン無視して移動しているのを修正していきます。

実装すること

前回までで土塀や板塀は乗り越える動作をするための移動経路の高低差を反映させたメッシュとして定義することを決めました。敵の移動経路は、地面のタイルに8方向の移動方向を定義し、移動方向ごとの移動コストを計算した上で A* アルゴリズムで経路探索します。

↓タイルと移動経路

壁の場合は、壁を乗り越える方向の移動コストがなるように壁の場所に傾斜があるメッシュを用意して利用します。今回の記事はこのメッシュの実装についてです。

移動経路メッシュの定義と移動コストの計算

メッシュ情報は yaml で定義することにしました。

頂点ごとに X 位置、Y 位置、高さ、を記述しているのですがデータに無駄が多いので、必要なら後で修正します。
そして、このメッシュデータが正しいかを確認するために、メッシュを描画するシーンを作ってみました。

↓櫓の隅で使うメッシュを描画したもの。

壁がある位置が高くなっているのがわかります。よいです。
次は、このメッシュ上を移動したときの移動コストを あらかじめ計算して利用できるようにするあたりなのですが、それは次回の記事にします。

基本的にはタイルの8方向と中心との間で、このメッシュの高低差による移動コストを計算するだけのはずです。

まとめと今後の予定

ユニットの移動コストの計算で利用するメッシュを定義し、形状を視認できる仕組みを作りました。次回はこのメッシュから移動コストを計算して利用するあたりに着手します。

今回の記事を書いていて気付いたのですが、物見櫓みたいな単体でそこそこ高い建物のメッシュをどうするか考えていませんでした。土塀や白漆喰の櫓を想定してたので「防弾率は下がるけど建物自体は壊れない」というつもりでしたが、物見櫓とか棍棒で叩けば壊れそうな納屋みたいな建物にも「建物は壊れない」ルールを適用するかは引き続き考えます。

ともあれ、実装が進んだので大変良いです。がんばります。

月別アーカイブ

限定特典から探す

記事を検索