1.2K Views
November 17, 24
スライド概要
IwakenLab Tech Conference 2024で発表した資料の公開向け版です
一部スライドの削除と、未使用スライドの追加を行いました
XR好きのUnityエンジニア
NavMesh完全理解 サックー
自己紹介 ● ● ● ● クライアントエンジニア in ambr, Inc. VRChat歴4年半程 ワールド制作やギミック制作 山頂スキャン、360撮影
内容 ● ● ● ● ● NavMeshとは何か 実際に活用した事例 Unity2022.2からの変化 使ってみる Tips
NavMeshとは何か
NavMeshとは何か ● Unityに標準で搭載された、キャラクタの移動を制御するAIシス テムの一部 ↓ ● AI Navigationパッケージでできることについて紹介 ● この発表はバージョン1.1.5を用いています
NavMeshとは何か ● 移動できるエリア を事前に(リアルタイムも可)設定 ↓ NavMesh ● 経路探索して実際に移動させるまで実行 ● 実はVRChatでもほぼすべての機能が使えそう
実演
実際の事例
VisionProアプリで動的に生成 https://x.com/VRC_Sakk/status/1804327332255273358
xambrのプレイヤー移動システム ● 移動範囲を確実に規定できる ○ 壁抜けが起こらない ○ 落下事故等も無し ● ジャンプとの相性は悪い…
Unity2022.2での変化
Unity2022.2から大きく変化 ● NavMeshComponentsという別リポジトリで開発されていた機 能が入った ● NavMeshの生成の仕方が変わった ● 古い方はまだ使える ○ ある程度併用もできそう
Unity2022.1以前 ● デフォルトでプロジェクトに含まれている ● Navigation Staticが入ったメッシュ を対象にNavMeshが生成 される ● Window>AI>Navigationタブからまとめて操作 ○ NavMeshのBake ○ オブジェクトごとにエリア分け
Unity2022.1以前
2022.2以降で古い方は使える? ● 一応使える ● StaticのEverythingにチェックを入れて無理やり設定 ● Window>AI>Navigation(Obsolete)タブからBake ● 一部コンポーネントもそのまま使える ○ Agent、Obstacle、Link ● 新しい方式へのConverterあり
2022.2以降で古い方は使える?
新しくでできるようになったこと ● ルールに基づいたエリアの設定とNavMeshのBake ● 任意のテレポートの作成 ● 地形に沿った移動 ↓ 高機能で扱いやすくなった!
できなくなったこと? ● NavMeshCleanerが使えなくなった…
使ってみる
プレイヤーを追いかける NPC NavMesh生成編 ● 移動する地面を作る ○ 一つのGameObjectの子にまとめるようにする ● 親にNavMeshSurfaceを貼り付ける ● Bakeする
プレイヤーを追いかける NPC
プレイヤーを追いかける NPC
プレイヤーを追いかける NPC ギミック編 ● 適当なNPCのモデルの親にNavMeshAgentを貼り付ける ● スクリプトでAgentに対してSetDestination()で目的地を設定 してあげる
プレイヤーを追いかける NPC
各Componentなどの設定
紹介するもの ● ● ● ● ● ● Area Agent NavMeshAgent NavMeshLink NavMeshSurface NavMeshObstacle
Areaについて ● 経路算出の材料となる ● AreaごとにCostを設定可能 ○ 例)ここは水で遅くなるから高コストにしよう ● 単純に距離にその値が掛けられる
Agentについて ● NPCの種類ごとの パラメータを設定できる ● 身長、幅、ジャンプ力など
NavMeshAgentについて ● 移動速度や障害物との距離など ● 個体ごと の設定
NavMeshLinkについて (テレポート ) ● 2地点を結ぶテレポートを設定可能 ● Areaを設定することが可能 ○ さらにCostを乗算調整することが可能
NavMeshSurfaceについて ● Agentごとに設定 ● Areaを設定可能 ● このコンポーネントが影響を与える範囲を選択可能 ○ 全GameObject、Hierarchy、Volume、Modifire付のみ ○ Layer設定 ● 実際のメッシュベースでの移動にするか ● Bake
NavMeshSurfaceについて
NavMeshObstacleについて ● 動的に変更できる障害物 ● ColliderのようにAgentに干渉可能
NavMeshObstacleについて ● X-NEOKETでの事例 ● 出展者が出展スペースを編集可能 ○ スペースの形状も選択できる!
Tips
NPCのアニメーション制御 ● NavMeshAgent.velocityを使うと楽 ○ Vector3なのでmagnitude取る ● AnimatorのParameterにSetFloat
NavMeshの動的生成 ● AR Foundationで環境メッシュを生成する場合 ● 生成されたメッシュを対象としたNavMeshSurfaceを配置 ○ Collect ObjectsをAll Game Objectsにするとか ● NavMeshSurface.BuildMesh()を呼ぶだけ
NavMeshの動的生成
NavMeshをきれいに Bakeするには ● 専用のメッシュを用意する ○ 目に見えるメッシュで作るとかなりぐちゃぐちゃに… ● できるだけCubeだけで作る ○ 頂点を減らす ● 段差は無くし、スロープにする
まとめ
まとめ ● Unity2022から使いやすくなった! ● 手軽にNPC動かせる ● VRChatでも動く!