3Dゲーム製作記録 2020/04/30

 

 

 2D版で作ってみた。
「なんか立体っぽくない?」と思う方もいよう……。
 ちょっとしたテストの場合は使い慣れた2Dエンジンのほうが楽なので、まずは擬似3Dで試している。

 毎フレーム計算しても60fps出ている。
 つまり、60体の敵を出して各々が一秒に一回ルート検索しても大丈夫ということ……。
 まぁ実際は描画とか衝突判定があるのでもっと重くなるが。

.

 

 実際のマップと移動パスはこんな感じ。
 白いメッシュが移動パス。
 正確には白いメッシュ上の点がノードで、線が移動パス。
 なぜ面が張ってあるのかというと、面が無いと頂点の繋がりがFBXファイルに記録されないから。

 このデータでゲームを作ると、敵が洞窟を進むときに真ん中を歩かず壁際を歩くことになる……。
 実際のマップでは面を細くする必要がある。
 というか移動パス用のエディタを自作するべきなんだろうな……。
 建物などを別オブジェクトとして配置する場合、建物の移動パスとフィールドマップの移動パスを繋げないといけないので、接合部分のノードを指定するためにもマップ関連のエディタを自作しなければならない。

.
・ノードの色の説明
 緑……探索しなかったノード
 赤……探索候補
 黄……探索済み(確定候補)
 黒……探索の必要なし(通ると遠回りになる/行き止まり)
 白……確定

 黒ノードがなんか間違ってる気がするけど、まぁ今のところはうまく動いてるっぽいのでいいだろう……。

.
 Aスターはゴールの距離と方向を優先して探索するアルゴリズム。

 ゴールが北北西にある場合、
・一歩北はかなり有力候補
・一歩西は現在地よりも若干可能性が高い
・一歩東は現在地より少し遠くなる
・一歩南は現在地よりだいぶ遠くなる
 となる

 黄ノードに隣接する緑ノードは赤ノードとなり、次の探索の候補になる。
 全赤ノードの中で最もゴールに近いものを選んで探索する。

 なので、ノードがほぼ一直線につながっていれば真っすぐゴールに向かう。(動画の最初の部分)
 折れ曲がるルートの場合(方眼上に敷き詰められたノードを斜めにたどる場合)は、スタート地点から中間点あたりまでは黄色が広がっていき、ゴールに近づくにつれて収束していく。

 ゴールが北にあり、スタート~ゴール間に東西方向に延びる長い壁がある場合、探索候補が壁に沿って横に伸びていく。
 距離が縮まらない場合はその周囲も探索していくので、黄色ノードがじわ~っと広がる。

.
 思いのほかうまくいったようでウキウキしてしまう。

 ノードが繋がっていない場合の処理や通過ノードの最大数などはまだ作っていない。
 さらに、ノードの読み込み時に、高さによって接続の有無を決めたい。
 どういうことかというと、崖のような場所の場合に、飛び降りる方向にはノードをつなげ、上がる方向には繋げないようにする。
 つまり一方通行にする。
 降りる場合でも高さがありすぎるときはリンクをしない。(落下ダメージを導入したいため)

 ノードのON/OFFもできるようにしたい。
 マップ読み込み後に木や建物などのオブジェクトを配置する場合や、スイッチで開閉する扉を作るときなどにノードのONN/OFが必要になる。
 ノードとオブジェクトで当たり判定を取って、当たってるときはノードをオフにする。

.
 平地部分ではノードが概ね等間隔で並んでいるため、ノードを素直にたどると斜め移動の際にジグザグ移動になる。
 これを自然にするには
・六角形のヘックス型にノードを配置する
・2~3個先のノードを追いかけるようにする
 などの工夫が必要になる。

 ヘックスはノード接続数が3つなので計算量も減る……ような気がする。
 一方、ヘックスだとジグザグ移動は若干緩和されるものの、今度は直進ができなくなる。
 なので2~3個先のノードを追いかける仕様は必須と言える。
 まぁ無理にヘックスを導入する必要はないかもしれない……。

 追跡モードでは、基本は2~3個先のノードを追いかけるようにし、障害物に当たった時は1個先のノードを目指すようにすればいいかも。
 一定時間経過後、また2~3個先のノードを追い始める。

 




0
≪ 前の作品 作品一覧 次の作品 ≫
Twitterでシェア!



"坂葉" is creating "ゲーム"
ものすごくかっこいいシューティングゲーム「夜光蛾6」の製作
坂葉 is creating ゲーム

ものすごくかっこいいシューティングゲーム「夜光蛾6」の製作
お支払い方法
 クレジットカード
 銀行振込
 楽天Edy決済
 デビット&プリペイドカード(Vプリカ等)
  支援はいつ開始してもOK!
  Entyで支援すると約1.5倍以上オトク!
詳細