SlideShare a Scribd company logo
1 of 14
自作三次元経路探索
アルゴリズムのお話
経路探索アルゴリズム例
• A*(エースター)
– 各点(ノード)を評価し最短経路を導く
– 障害物を避ける経路を必ず見つける
– 処理が重く評価を行う指標が必要
• 幅優先探索
– 始点から近い順に各点を辿る
– 障害物を避ける経路を必ず見つける
– 全ての経路を探索するため計算量が莫大
経路探索の問題点
計算量のせいで処理が重い!
– 三次元となるとなおさら
– 重くて複数同時に処理を回せない
理由は?
「計算対象(ノード)」が多すぎるのではないか
解決策(for Unity)
• Bounds(バウンス)を用いる
– AABB(軸平行境界ボックス)
– 「バウンディングボックス」ともいう
– オブジェクトを囲んでいる(下画像の紫部)
目的:計算対象を減らす
解決策(for Unity)
• Raycast(レイキャスト)を用いる
– 不可視の光線を飛ばし衝突判定を行う
– Debug.DrawRay(引数色々)で描画可能
– 「SphereCast(スフィアキャスト)」も存在する
目的:計算対象を減らす
アルゴリズム
1. 自座標から目標座標へRayを飛ばす
目的:計算対象を減らす
自分
障
害
物
目標
間に障害物がなければ直線的に移動
目標
アルゴリズム
2. 障害物が存在する際、障害物のBouns情報を取得
目的:計算対象を減らす
自分
障
害
物!
))) 目標
自分
障
害
物
Bouds
情報
アルゴリズム
3. Bouns情報からノードを4つ作成
目的:計算対象を減らす
障
害
物
上
1. 情報からボックスの角の座標を取得
2. 中心から離れるベクトル方向へ座標
ずらし(障害物から離れさせる)
3. 自分の現在高さへ調整
||
計算対象が4つのみで良くなった!
アルゴリズム
4. ノードを絞り込む
目的:計算対象を減らす
障
害
物
• 自分から見えないもの
• ほぼ正面にあるもの
除外条件
自
相
除外対象
(例)
アルゴリズム
5. 距離の合計から最も短いルートを選択
目的:計算対象を減らす
自
相
障害物を跨ぐような経路は
考慮しないよう配慮する
結果1
結果2
結果3
メリット
• 動作がかなり軽い
• 三次元的な経路探索が可能
デメリット
• 複雑な形状や穴が開いた障害物に対応不可
• 障害物が隣り合っていると探索が上手くいかな
いときがある(再探索で対応可能)
• 上下の経路作成に未対応

More Related Content

What's hot

What's hot (20)

Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
 
【Unity道場スペシャル 2017博多】TextMesh Pro を使いこなす
【Unity道場スペシャル 2017博多】TextMesh Pro を使いこなす【Unity道場スペシャル 2017博多】TextMesh Pro を使いこなす
【Unity道場スペシャル 2017博多】TextMesh Pro を使いこなす
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
UniRx の1歩目
UniRx の1歩目UniRx の1歩目
UniRx の1歩目
 
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 

超軽量経路探索 for Unity