ベルギーのどこか
みなさんこんにちは🌚
最近アルティメットテニスという去年出たばかりのアプリにはまっているブルーノです。ゴールドちっとも貯まらないんじゃ😫
さて今回は「Unityで神になる本」おそらくアニメーション編最後です!!頑張っていきましょう!!
NavMeshについて
前回はアニメーションのブレンドの仕方を学習し、自然な動きの作り方をやりましたね。今回は別のUnity標準機能のNavMeshという機能を使ってみようと思います!なんとこのNavMeshという機能、指定した場所へ自動で走ってくれるように設定できるんです!
最初に簡単な迷路を作りました。壁はキューブを伸ばし、Planeの子にすることで床とセットにしてまとめておきました。そして、一つ大切なのがこのPlaneを子の壁たちごとStaticにすることです。Staticにはインスペクターから設定できます
「この子ごとStaticにしてもいいですか?」と聞かれるのでとりあえずYesをクリックしておきましょう。
このStatic、C#の勉強の時にやりましたね。唯一の存在になることで中身が変わらない「静的」な存在のことです。実はイマイチそれによってどんなことが変わるのか全ては把握しきれていません。また別の機会にまとめることがあったらリンクを貼っておきます。
さて、舞台設定を終えたら、いよいよNavMeshを利用してみましょう。Window→NavigationでまずはNavMeshをベイクします。ベイク(Bake)とはパン屋さんを意味する「ベーカリー」のベイクと同じで、「焼く」「焼き付ける」という意味です。歩ける範囲を焼き付ける作業というわけですね。
インスペクタータブに新たに「Navigation」タブが増えました。この中の[Bake]欄から[Bake]をクリックしましょう。
するとSceneビューに
歩ける範囲が青く表示されました!!しかもこれ壁のそばを拡大するとわかるのですが
ものが通れないような小さなスペースは勝手に除いてくれます。でも変ですね。別に何が通るかとか指定していないのになんの大きさを基準にこの幅は計算されているのでしょうか。それは先ほどのNavigationタブの[Agents]欄にあります。
ここで通るオブジェクトの幅(Radius)や背の高さ(Height)、階段の高さ(Step Height)や登れる坂の傾斜(Max Slope)を指定します。実際の作業現場ではここをいじりながら先ほどの[Bake]と隣の[Clear]ボタンを駆使しながらいい感じに歩ける範囲を指定します。
いい感じに道を作れたら、今度はイーサンくんに歩けるよう設定をしていきたいと思います。
イーサンくんに[Add Component]からNav Mesh Agentコンポーネントを追加します。
そして次にイーサンくんに以下のスクリプトを貼り付けます。
このコードの全貌は要約すると
NavMeshAgent関数を用意→カメラからクリックされた座標をRayに送り、そこを目的地に設定→座標とアニメーションに適用、移動を開始するというざっくりした内容のようです。細かい小回りやスピードの調整などはイーサンくんにつけられたNav Mesh Agentコンポーネントが勝手にやってくれているようです。
ただ、今回私が再生すると。。。
確かにクリックした位置に向かって走り出してくれるのですが。。
クリックした位置周辺をずっとウロウロしている....なぜだ。
しかも再生開始時には
いきなり前に走り出す。。。
なんでだ😭
色々試行錯誤したのですがこの二つだけは直せませんでした。大まかな今回の目的の機能は果たせましたがなんかモヤモヤします...
これからもこの機能はアクションRPGゲームの敵の動きなどに使いそうなのでよく理解しておく必要がありますね。とりあえず今回はここまでにしておきます。
気づくと突然外があったかくなっていました。いつも通りの服装でコートを羽織って外に出たらとても暑くて脱いでしまいました。これからは快適に過ごしやすくなりますね。環境が良くなったところで勉強やテニスやバイトに一層打ち込もうと思います😡