3Dゲーム製作記録 2020/05/17 足が太い女と鬼ごっこ
経路探索ノードを使って敵が追いかけてくるようになった。
乳房と尻がでかく足が太い女がドスドスと追いかけてくる。
僕は足が太い女が大好きなのに2Dゲームでは普通っぽい女ばかり描いてきたので、3Dでは遠慮せずに太くしていきたい。
空中に浮かんでる緑の玉はルート検索用のノード。
数字のついた玉は追跡用のノードリスト。
敵が経路探索すると、移動予定のノードがオブジェクトとして生成される。
敵ごとに色分けしてあるけど敵が多いのでわけがわからなくなっている……。(正確には検索のたびに色が割り振られる)
0番がスタート地点(敵にいちばん近いノード)で、プレイヤーに近いノードほど数字が大きくなる。
敵は自分の追跡ノードリストを数字の順番で辿るわけですよ。
数字表示のプログラムは急遽でっち上げたものなので、9以上はasciiコード上の文字が表示される。
現在はノードをまっすぐ辿るため、直線的で不自然な移動になっている。
次はこのあたりを直したいと思っている……。
これが終わったら、実際のゲームで使えるマップを作ってみたい。
凹凸のある山岳地帯に階層型の建物と地下洞窟がある感じ。
quakeの水中シーンが好きなので泳げるようにもしたいけど、早くゲームの形にしたいという気持ちも強いため、泳ぎは次の作品に回そうかと思っている。
.
草揺らしシェーダも入れた。
以前の実験プログラムから二年も経っていたのでシェーダ関連のことは完全に頭から消えていた……。
何がどうなっているのかさっぱりわからなくて困った。
実験途中のまま放置していたので動くものが残っていなかったのが痛い。
草には地形の影が反映されておらずちょっと表示が変になっている。
今はDXライブラリ付属の影生成機能を使ってるけど、自作シェーダを使う場合は影表示も自前でやらないといけなかった気がする。
これが面倒で放置したようなおぼえがあるぞ……。
ソフトシャドウをやろうとしていたおぼえもある。全然わからなくて投げ出したおぼえもある。
草は揺れなくてもいいかと思って、3D一作目はシェーダ関連全部やめようと思ったおぼえもある……。
.
壁ずりを丁寧にやったせいでコリジョン判定が重かったので、軽量判定をいれた。
考えてみると綺麗に壁ずりしないといけないのはプレイヤーキャラだけで、敵は多少壁際でガクガクしても気にならないわけですよ。
あと接地している斜面の角度がキャラの移動量に影響するようにもした。(上りは遅く、下りは速く、急坂で静止してるとずり落ちる)
しっかり計算してるわけじゃなくて、法線の垂直要素をゼロにしたものを移動量に足す感じ。
手間がかからない割にいい感じの結果になる手法ではあるまいか。
一定角度以下なら斜面の影響を受けないようにすれば、緩い斜面の場合ずり落ちないようにできる。
キャラはふんばってその場に留まるけど球体は転がるとか。
キャラが接地している間は移動量が一定割合で減少するようにもした。(つまり摩擦が働く)
摩擦係数とかよくわからんので、XとZに0.25を掛けている。
今まではキー入力のところで速度に上限を入れていたけど、こうしたほうが挙動としてはリアルかつ応用が効く……。というか上記の斜面での挙動を表現するために導入せざるを得なくなったのだった。
しかし今度はジャンプ中の空中制御の扱いがむずかしくなる。
空中では摩擦が働かず減速しないので、移動キーを前に押しっぱなしだとすごい幅跳びになってしまうわけですよ。
でも、そもそも人間はジャンプ中に加速とか空中制御なんてできないんだよ……。
僕は2Dアクションでも空中制御できないほうが好きなんだよ……。
しかし一般的には機敏に空中制御出来たほうが「レスポンスのいい良いゲーム!」みたいに思われたりするからむずかしい。
僕は魔界村みたいな「制御ができない代わりに空中で振り向けるゲーム」がかっこいいと思うんですよ。
空中振り向きは攻撃はかなりかっこいい。
追っ手から逃げる忍者がジャンプ中に振り向いて手裏剣投げる感じ。
3Dゲームで空中制御を取り入れる場合、空中でも若干強めの空気抵抗がかかるいっぽう、加速量(キー入力による移動量の加算値)は低めという感じがいいんだろうか。
.
あとリロードや武器の持ち替えができるようになった。
今のところはリロードと武器変更のモーションが兼用だけど本製作の時には専用のものを作る。
モーション自体も相当しょぼいけど、まぁテスト用なので大目に見てほしい……。
あと巨乳(爆乳)キャラだと胸が邪魔で手元でゴソゴソやる動作を作りにくいことを知った。
現在の武器変更モーションがかなり変なのはボインのせいなんですよ……。
なぜ腕でモゾモゾやっているのかというと、魔法の籠手で攻撃するため。
籠手の設定変更で使用魔法を変える仕組みになっている。
支援者用記事にこのあたりのことを少し追記する。
.
●索敵~追跡の流れを考える
// --------
1 索敵(search)モード
その場、もしくは一定ルート巡回中に自機を探す。
キャラの頭の向きからn度・nメートル以内をnフレームおきにチェックする。
とりあえず90度、50メートル、10フレームおきくらいにしてみる。
自機との距離に応じてチェックの頻度を上げてもいいかもしれない。
発見したら自分とターゲットの最寄りのノードを探す。
これがルート検索のスタート/ゴール地点になる。
発見したノードを元にルート検索し、経由するノードをノードリストに登録する。
検索結果のノード数が一定数以上の場合は索敵モードのまま。
つまり視界内に入っても移動距離が長すぎる場合は持ち場を離れない。
.
// --------
2 追跡(chase)モード
○2つ先モード
最寄りのノードから2つ先のノードを目指す。
なぜ二つ先かというと、ノードが格子状に配置されているときに斜め方向のノードをひとつづつ辿るとジグザグ移動になるため。
ノード中心からnメートル(とりあえず3メートルくらい?)以内のランダム地点を目標にする。
なぜランダムかというと、完全にまっすぐ移動させるよりふらつかせたほうが良さそうなため。
ノード中心からnメートル以内に到着したら目標ノードをさらに二つ先のものに更新する。
このモードだと地形によっては引っかかる場合がある。
移動中壁に突き当たったら1つ先のノードを目指す。
○1つ先モード(引っ掛かり対策)
直近ノードの中心点を目指して移動する。
ノードを2つ通過したら2つ先モードに移行する。
引っかかった時用のモードなので、なるべく正確に中心点を目指す。
.
○攻撃モード移行判定
近接型
次の目標ノードへの距離と自機への距離を比べ、自機のほうが近かったら攻撃モードへ
遠隔型
自機との距離がnメートル(キャラごとの射程範囲)かつ視線レイが通ったら(間に障害物がなければ)攻撃モードへ移行。
障害物があればさらにノードをたどる。
.
○再検索/追跡終了
n秒ごとに視界チェック。
自機が見つかったらルートを再検索する。
追跡開始から一定期間自機を見つけられなかったら追跡終了。(もしくはゴールに到達しても発見できない場合)
デフォルト守備位置へのルートを検索して帰還する。
.
// --------
3 攻撃モード
自機が射程範囲から外れたら追跡モードに移行。
n1秒(2秒くらい?)ごとに視界チェックする。
n2秒(10秒くらい?)以上自機を見失ったら自機を追跡する。この時は視界内にいなくても自機の現座標でルート検索する。
n3秒(20秒くらい?)以上自機を見失ったらデフォルト守備位置に帰還する。
≪ 前の作品 作品一覧 次の作品 ≫