スポンサーリンク

Unity実習32、ナビゲーションメッシュについて

SnapCrab_NoName_2016-6-22_16-42-11_No-00.jpg

ナビゲーションメッシュってなんだよ
というわkで、本から引用

ナビゲーションメッシュ(Navigations Meshes)は、複雑な構造をした3Dマップの中でもスムーズに移動経路を計算して、目的地に移動する処理を簡単に実装できる機能


とのこと、これをつければA地点からB地点まで、道中の障害物を避けながら進むことができちゃうわけですね

早速やります
Unityを起動したら、任意の場所に新規作成
名前はChapterNaviにでもしておきます
SnapCrab_Unity 535f1_2016-6-22_14-33-35_No-00

作成したら、ProjectのAssets内に
UNIDRA_DATA/ChapterProject/ChapterNavi/Assets/
の中にあるファイルを全てドラッグ&ドロップ

ProjectでAssets/Scene/NoNaviMeshScene.unity をダブルクリックします
こっちはまだメッシュなどの設定をしていない方です
これでデータの読み込みは終わり
SnapCrab_NoName_2016-6-22_14-42-18_No-00.jpg

ナビゲーションメッシュを作るには大きく分けて2つの作業があり、1つはナビゲーションメッシュのベイク
もう一つは、エージェントの設定
メッシュの方で経路探索のヒントとなるメッシュを構築したり、条件に応じて経路探索用のデータを作ったり
で、エージェントはその上を移動するキャラだったり障害物

いまいちピンとこないのでやっていきます
メインメニューで Windows > Navigation を選択
すると、Navigationビューが出現します
SnapCrab_NoName_2016-6-22_14-55-11_No-00.jpg

地形データを選択してくれ、と表示されているので、Hierarchyの Platforms を選択...
というところでHierarchyでSlopeがなぜか親子関係になっていないのに気付く
地形データはまとまってないと面倒臭そうなので親子関係にしたら...
SnapCrab_NoName_2016-6-22_15-12-51_No-00.jpg

何でそうなるんだ...
動きがいつもと違っておかしいので今回は放置
Platformを選択したら設定メニューが増えるので、説明
Object
・Navigation Static: ナビゲーションメッシュの計算に含める場合はチェック
・OffMeshLink Generatic: オフメッシュリンクを作成する場合はチェック、地面がない場所で飛び越えたり飛び降りたりして移動するのかという内容
・Navigation Area: エリアを選択、エリアの項目で説明します
SnapCrab_NoName_2016-6-22_15-27-47_No-00.jpg

Bake
エージェントの移動条件みたいな?
Agent Radius: ナビゲーションメッシュの半径、設定した値の距離が壁と離れる距離になります
Agent Hight: ナビ(略)の高さ、地面に対して設定した数値がオフセットになります(←よく分からない)
Max Slope: エージェントが登り降りできる斜面の傾斜の設定
Step Height: エージェントが乗り越えられる段差の高さ
Drop Height: エージェントが飛び降りれる高さ?
Jump Distance: エージェントがジャンプして越えられる高さ?
AdvancedについてはUnityマニュアル
SnapCrab_NoName_2016-6-22_15-27-55_No-00.jpg


Areas
エリアごと、マップのこの部分はこうで、この部分はこう、という用にするための設定
レイヤーみたいなもの
画像にはありませんが。User 3 のところに Name: Slope Cost: 4 のエリアを作っておいてください
SnapCrab_NoName_2016-6-22_15-28-5_No-00.jpg

Navigationビューの下にあるBakeを押せばナビゲーションメッシュが作成されます
Clearを押せば削除が可能
早速設定していきます
NavigationビューのObjectで Mesh Renderer を選択、HierarchyでSlopeを選びます
そして、Navigation Area を Slope に変更
残りのもの(Platform)はすべて Walkable
飛び降りたりはしたくないので、全部のGenerate OffMeshLinksのチェックを外します
SnapCrab_NoName_2016-6-22_16-0-21_No-00.jpg

出来たら右下の Bake を押してナビメッシュを作ります
青色で表示された部分がエージェントが動き回れる場所になります
SnapCrab_NoName_2016-6-22_16-3-41_No-00.jpg

キャラクターを動かす
NavigationビューでObjectのScene FilterをAllに
HierarchyのPlayerを選択
Scriptが読み込めてないとエラーが出ています(出ていない場合は飛ばしてください)
SnapCrab_NoName_2016-6-22_16-9-35_No-00.jpg

ScriptでPlayerCtrl.csをダブルクリック
Monoで開いたら、一番下に1行増やしてFile > Save
Unityに戻ると変換するかと言われるので変換
SnapCrab_API Update Required_2016-6-22_16-15-18_No-00
エラーアイコンが消えたら次へ
InspectorにAdd Component > Navigation > Nav Mesh Agent を追加
(なぜか既にあったという...)
・Radius: エージェントの半径、この値を元に壁からどれくらい離れて移動するか決めます、0にすると壁に埋まることもあるとか
・Height: エージェントの高さ
・Base Offset: 縦方向において、実際のオブジェクトとコライダの差分の距離
・Speed: 最大移動速度
・Angular Speed: 回転速度。方向転換の速さが決まってきます
・Accelaration: 最大加速度
・Stopping Distance: 停止距離。目的地からここで指定した距離までくると減速し始めます
・Area Mask: 移動できるAreaを選択
他のものについては説明がなかったのでワカラナイ
SnapCrab_NoName_2016-6-22_16-27-31_No-00.jpg

これらを機能させるスクリプトは予めプレイヤーに貼ってあるので
割当だけします
Agentの項目に、PlayerのInspectorにあるNav Mesh Agentをドラッグ&ドロップ
SnapCrab_NoName_2016-6-22_16-29-55_No-00.jpg

これで設定完了
で、実際に操作してみれば動くそうなのですが
ピクリともしないですね
Why
正直、もうこの本でこういった事例はたくさんあってもう慣れましたし、この章、わずか9ページしかないにもかかわらず、かなり調べごとをしないといけなくてもう疲れました...

ちなみに、完成品であるNavMashSceneを起動して動くかやってみましたが、動かなかったので
まぁ、そういうことなんでしょうね

とりあえず、ナビメッシュの作業について学習できたのでヨシとします
次回は「地形を作ろう」です
今回UNIDRAは最初から地形がありましたが、その作り方
木の作り方なんかは知りたかったので期待しています
スクリプトもないし、気楽にやれそうです
関連記事

Leave a Reply


管理者にだけ表示を許可する

Comment

Leave a Reply


管理者にだけ表示を許可する