0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

動的生成されたアクタ上でパス探索する方法

Last updated at Posted at 2025-12-09

はじめまして、Backと申します。

みなさん動的生成され、サブレベルに割り当てられたステージを作ったことはありますか?動的に生成されるとNavMeshがきちんとステージ同士でつながっているか、そもそも壁や穴でプレイヤーの到達できない箇所が出てくるのではないかなど不安に思うところが多くあります。

それらの不安を解消する方法を探していきましょう。

目的

静的ステージ上にあるポイントAからサブレベルに割り当てられ動的に生成されるステージ上にあるポイントBの間をゲーム開始すぐにパス探索する。

状況

Bのあるステージはレベル詳細画面でInitially LoadedとInitially Visibleにチェックを入れておく。またAとBの間には狭い隙間が存在する。

目次

  1. パス探索の方法
  2. デバッグの方法
  3. 探索が失敗する要因

開発環境

UnrealEngine5.3
Project Settings の Navigation System -> Runtime Generation を Dynamic

パス探索

パス探索には二つの方法があります。

1. Find Path to Location Synchronously

同期的にNavMeshを使った経路探索ができます。戻り値から探索結果、探索過程の情報を得ることもできます。
pathfindingContextは探索を行うNavMeshに対応するPawnを割り当てましょう。今回はプレイヤーなのでGetPlayerPawnです。

2. MoveToでPawnを動かす

実際にPawnを動かすため処理は重めですが、ドアに近づいたらカギを使用したり、なぞ解きをしたりする機能をもたせることでより本番に近い動作をさせることができます。

今回はギミックも何もないため1の方法を使用します。

デバッグ方法

Find Path to Location Synchronouslyの戻り値からPathPointsを取得
PathPointsをForLoop
DrawDebugSphereで描画
これによりAからBまでの探索経路を可視化することができました。
スクリーンショット 2025-12-11 200239.png

探索が失敗する要因

この画像を見てください。なぜNavMesh同士の間が空いているのか?
スクリーンショット 2025-12-10 000847.png

いくつか原因が考えられました

  1. 隠れたCollisionにふさがれている
  2. RecastやプレイヤーのagentSizeが大きすぎる
  3. 近くのアクタがNavmeshに影響を与えている
  4. 床のジオメトリが複雑でNavMeshのMaxStepを超えている
  5. Navmeshのバグ

原因究明のためワイヤーフレームをみたり、近くのアクタのCan Ever Affect Navigationをオフにしたりしました。悩んでいると...あれ...なんか壁とNavmeshの間空きすぎじゃない?agentSize変更したはずでは...?

原因はProjectSetting->NavigationSystem->Supported AgentsのAgentSizeが大きすぎるでした!
SupportedAgentの数だけ動的にRecastが生成されるのでAgentSizeが上書きされるようです。
スクリーンショット 2025-12-11 200549.png

まとめ

というわけで無事探索成功です。
SplineやNiagaraと組み合わせて道筋を可視化することもできそうです。また、NavMeshをDynamicに設定しておけば動的にステージを生成していても再度NavMeshが作られるため動的生成だろうと静的だろうとあまり挙動は変わらなそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?