投稿記事

籠城ゲームの記事 (97)

竹林ソフト 2024/06/03 20:00

ねこ巫女籠城ゲーム開発(敵の移動デモ)

敵の移動まわりに着手します。

やること

敵と移動先とを定義して、その途中に「斜面」「壁」「石垣」「建物」「橋」なんかを配置して、それらを適切に移動するかの確認をします。

とりあえずは、この動作確認のための準備を行います。

やったこと

とりあえず、今までに実装して機能を組み合わせて地面が描画されるようにします。

↓ しました。よいです。

次に、何も考えずに敵を配置します。

↓ しました。よいです。

そして、移動まわりのコードを書く前に今回は何を確認したいのかを列挙すると

  • 敵が平地を歩く様子
  • 敵が起伏のある地面を歩く様子
  • 敵が柵や壁を乗り越える様子
  • 敵が石垣を登る様子
  • 敵が橋の上を移動する様子

なので、敵は移動しつつ、地面のメッシュか建物や石垣や壁が提供するメッシュの上にいるものとして移動してくれればよさそうです。

とりあえず移動自体は必須なので動くようにしました。

↓ とりあえず移動している様子

移動速度が速いと思いましたが、今のところ速度変更は未実装です。後でまた実装します。

まだアニメーションしていませんが「平地を歩く」はここまでで動作したことにします。
次は、地面に起伏を作ってみて、その起伏に沿って移動するかを確認します。

↓ 地面に斜面を作って移動させた様子

このあたりまでは自キャラのために実装済みだったので動作して当然です。とはいえ実際に動作確認して適切に動作したのは良いです。

この敵にアニメーションを適用したり、建物や壁を乗り越えさせたり、移動速度を調整する機能を実装するのは次回にやります。

まとめと今後の予定

敵の移動まわりを実装するにあたり、動作確認のために専用のシーンを作ってとりあえず動作するようにしました。大変よいです。

次回は、この続きで壁や石垣を登るあたりに着手するか、Lua スクリプトでゲーム進捗を管理するあたりに着手します。がんばります。

竹林ソフト 2024/05/30 20:00

ねこ巫女籠城ゲーム開発(ゲーム管理の Lua スクリプトを導入する)

以前の記事 でゲーム進行を管理する Lua スクリプトをどう扱うかを検討したので、そのあたりを実装していきます。

やったこと

ゲーム開始の処理の確認

流れとしては

  • NewGame シーンでプレイヤーが地形を選んで「開始」する。
    • 地形データを new_game.dat という名前で保存しておく。
    • new_game.dat に Lua スクリプトを埋め込む。
  • Game シーンの読み込み
    • フィールドの生成と読み込み
    • Lua スクリプトの実行

という感じにします。地形や建物の読み込みが終わった後に、Lua スクリプトでの管理を始める予定です。
そして、とりあえずフリープレイ用の Lua スクリプトを作成しました。

↓ 仮作成した Lua スクリプト

よいです。

Lua スクリプトを実行する

次は、この Lua スクリプトを実際に実行して game:flag() とか game:setFlag() なんかを実行できるようにします。

このあたりは MoonSharp アセットでどうにかします。

そして、詳細は省略しますが最終的に Unity のゲームのメインループで Lua スクリプトのコルーチンがエラーなく動作するようにできました。

よいです。

まとめと今後の予定

ゲームのもろもろを管理するための Lua スクリプトを取り込みました。よいです。
住民や敵の追加も Lua スクリプトで管理したり、会話シーンを表示できるようにしたりとか、引き続き機能拡張していこうと思います。

次回は、この Lua スクリプトまわりの続きか、敵の移動に着手しようと思います。がんばります。

竹林ソフト 2024/05/23 20:00

ねこ巫女籠城ゲーム開発(敵の移動の仕様を考える)

攻めてくる敵の移動をそれっぽくするための仕様を書き出して検討します。

やりたいこと

概要から書き出してみると

  • 作った城郭の周囲に敵が配置されて、その敵がわらわらと押し寄せてくる。
  • 敵は門とかに集中しつつも、適当に斜面なり石垣を登ったりもしてほしい。

ということを実現したいです。
実装を前提にした仕様を考えていきます。

敵の経路探索について

基本的にはダイクストラ法を使って敵の攻撃対象である「拠点」として定義した建物に向かうようにします。
なんというか「大部分の敵は門に向かいつつも、ある程度の数の敵は門以外を攻めようとする」みたいなことを実現したいです。

具体的な経路探索については、

  • 拠点からダイクストラ法でタイルを評価していき「拠点に向かうにはこっちに移動する」という方向をタイルごとに8方向で定義する。
    • この評価はフレームごとに少しずつ行い、足元に移動方向が定義されたユニットは移動を開始する。
  • 全てのユニットの足元のタイルに移動方向の定義が終わったら、改めて最初からタイル評価を始める。
    • 門などでの渋滞を考慮して、渋滞が発生しているタイルの移動コストを高めにする。
    • 評価し直した結果は順次タイルに上書きしていく。

という処理を考えています。小難しいですね。
いつもそうなのですが、自分が実装する仕様を小難しいものにするのは大変つらいです。

敵のわらわら感は Boids っぽいもので実現する

Boids は群れっぽく移動させるアルゴリズムです。
とりあえず、1つのタイルに入れる敵の数を抑制する、とかの実装を考えていますがまた後で考えます。

1つのタイルといっても、石垣の斜面は1つのタイルに収めるつもりなのですが、石垣を登れる敵の数を抑制してもいいのかとか、思ったよりは簡単じゃないです。石垣だけ特別扱いすればいい気もしています。

建物や壁の敵の乗り越え方について

これは、建物や壁に対して移動用のメッシュを定義してあるので、それを利用するつもりです。壁はタイルの境界線上に配置されうるのですが、それは移動用メッシュをタイルごとになるように分割します。

↓ 過去に作った建物の移動用メッシュの例

その他

近接攻撃の敵の移動は、基本は拠点に向かいつつも近い距離にタレットがあったら移動して攻撃してもいいかな、とか考えています。

石垣の上にある隅櫓などについてですが、実物の櫓を見ると登って侵入できる気がしないのですが、ゲームなので櫓にとりついてある程度の移動時間が経過したら壁をすり抜けて建物内に移動できるようにします。
建物内に移動した敵が建物にどう影響するかはまた後で考えます。

まとめと今後の予定

今回は、敵の移動をどうするかを考えて書き出してみました。よいです。

次回は「敵がまっすぐ移動する」とかの基本動作に着手して、順に「壁があったら乗り越える」という機能を追加していきたいです。がんばります。

竹林ソフト 2024/05/20 20:00

ねこ巫女籠城ゲーム開発(雑多な処理の修正)

気が重くて後回しにしてきたタスクがいくつもあって、そろそろ着手する必要性が出てきたので着手します。

↓ このプロジェクトのチケット管理システムのチャート表示と上位チケット

プロジェクト名の JD は Jinja Defenders です。

やったこと

ユニットの位置管理を Vector2Int から Vector3Int にする

Vector2Int は Unity で使えるデータ構造で整数型の (x, y) の2つの変数を管理できます。
今まではユニット位置は (x, y) で管理していたのですが、橋が追加されたので「橋の上にいる」「橋の下にいる」の高さ情報を管理するために (x, y, z) の3つで管理するように変更します。

この変更は、影響範囲が大きいので、ものすごく気が重いです。
気が重いのでエラーにならない修正だけ行いました。開発していて必要になった段階で対処します。

建物と地面に運搬する資源の管理まわりを修正する

建築中の建物や、高低差を変更中の地面について「どれだけの資源を納品済みか」とか「どれだけ作業が進んだか」の管理に一貫性がなかったので、新しくクラスを作って実装し直しました。

この作業は、変更が伝搬して修正箇所がとても多くて時間がかかりました。
とりあえず、実行時エラーが起きなくなったので検証は今後にやります。

そして、本来は上記以外にも

  • ワーカーの情報をセーブとロードの対象にする
  • セーブデータの先頭に _ 文字を使えないようにする
  • 設定パネルからフルスクリーンかウィンドウかを変更できるようにする
  • ゲーム画面下のボタン表示がおかしいのを修正する
  • 地面の高低差を指示する操作まわりを修正する
  • 設定でホイール操作の感度を変更できるようにする

というタスクに着手したかったのですが、これらはまた次回以降に着手します。

まとめと今後の予定

後回しにしてきたタスクに着手して、作業しただけ実装を修正できました。大変よいです。
作業しながら「後回しにしてきたのは理由があるんだな」としみじみ思いました。小難しいし、修正しても動作に変更はないし、とかいろいろです。

次回は、この作業の続きか、ゲーム進行を Lua スクリプトで管理する仕組みの導入か、敵がわらわら押し寄せてくるあたりに着手しようと思います。がんばります。

竹林ソフト 2024/05/16 20:00

ねこ巫女籠城ゲーム開発(VRoid Studio モデルの表情変更)

本業のサラリーマン仕事をがんばってやる気が残ってないので、後回しにしてた優先度の低い作業に着手します。優先度が高くて未着手の作業はだいたい開発コストが高くてつらいのです。

やったこと

VRoid Studio モデルの表情を C# で変更する

VRM10_Samples 付属の VRM10 Auto Expression スクリプトが表情変更のデモだったので、適用して録画してみました。

こういう感じになるのか。

この VRoid Studio モデルは操作キャラとして使ったり、フィールドにキャラがいるシーンを表現したいときに使おうと思っていて「表情の変化もできたらいいな」くらいの必要度です。

通常の会話シーンでは下記リンク先にある「著作権フリー立ちキャラ素材集」で作った立ち絵を使いたいと思っています。
https://www.dlsite.com/maniax/circle/profile/=/maker_id/RG02425.html

↓ 表情の種類もたくさんある

とりあえず VRoid Studio の表情まわりを試してみて「表情の表現に忌避するほどの違和感がなかったので、3D モデルを使った会話シーンを作れるとは思うけど、カメラ位置のこだわりや、モーションを追加作成したくなって開発コスト上がりそうなので 2D 立ち絵を使うのでいいか」と改めて思いました。

まとめと今後の予定

気になっていた VRoid Studio モデルの表情の変更方法を調べて動作させてみました。よいです。

次回は、優先度の高いタスクを少しでも進めようと思います。がんばります。

1 2 3 4 5 6 7

月別アーカイブ

限定特典から探す

記事を検索