【Unity】A* Pathfinding Project Pro 試してみた
・GridGraphのグリッド間の障害物で接続のブロック
グリッド配置のSRPG系のゲームで障害物をグリッド上ではなく、グリッドとグリッドの間に障害物を配置して、その間の接続をブロックする方法。
基本的にアセットの仕様として、移動阻害をする場合はグリッド自体を無効にする処理になるので、障害物としてオブジェクトを配置をする場合は、このようにグリッド(Node)自体が無効になる。
※赤い四角は無効になってるNodeの表示。緑のラインはNode-Nodeの接続
こんな感じでNodeは無効にせずに、接続だけをなくしたい時の方法。
公式のドキュメントにはやり方が見つからなかったのですが、フォーラムの方を探していたら数年前のスレッドだが、参考になるスレッドがありました。
スレッド自体がかなり前なので、修正すべきスクリプトの位置が大分違ったので苦労しました。
GridGenerator.cs/Class::GridGraph
public virtual bool IsValidConnection (GridNodeBase node1, GridNodeBase node2) { if (!node1.Walkable || !node2.Walkable) { return false; } //追加部分↓ if (Physics.Linecast((Vector3) node1.position, (Vector3) node2.position)) { return false; } //追加部分↑ if (maxClimb <= 0 || collision.use2D) return true; //変更がないので省略 }
Graph生成時?Scan時?にNode間にLinecastし、障害物がある場合はConnectionを生成しないようにしている。実際に使用する場合はLinecastの第三引数にLayermaskを設定した方がいい。
GridGraphクラスは専用のEditorScriptが存在するのでLayermask変数を用意してInspectorから設定したい場合は
Assets/AstarPathfindingProject/Editor/GraphEditors/GridGeneratorEditor.cs
を編集する必要があるので少し手間がかかる。
- 価格: 5060 円
- 楽天で詳細を見る