NavMesh完全理解_公開版

1.2K Views

November 17, 24

スライド概要

IwakenLab Tech Conference 2024で発表した資料の公開向け版です
一部スライドの削除と、未使用スライドの追加を行いました

profile-image

XR好きのUnityエンジニア

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

NavMesh完全理解 サックー

2.

自己紹介 ● ● ● ● クライアントエンジニア in ambr, Inc. VRChat歴4年半程 ワールド制作やギミック制作 山頂スキャン、360撮影

3.

内容 ● ● ● ● ● NavMeshとは何か 実際に活用した事例 Unity2022.2からの変化 使ってみる Tips

4.

NavMeshとは何か

5.

NavMeshとは何か ● Unityに標準で搭載された、キャラクタの移動を制御するAIシス テムの一部 ↓ ● AI Navigationパッケージでできることについて紹介 ● この発表はバージョン1.1.5を用いています

6.

NavMeshとは何か ● 移動できるエリア を事前に(リアルタイムも可)設定 ↓ NavMesh ● 経路探索して実際に移動させるまで実行 ● 実はVRChatでもほぼすべての機能が使えそう

7.

実演

8.

実際の事例

9.

VisionProアプリで動的に生成 https://x.com/VRC_Sakk/status/1804327332255273358

10.

xambrのプレイヤー移動システム ● 移動範囲を確実に規定できる ○ 壁抜けが起こらない ○ 落下事故等も無し ● ジャンプとの相性は悪い…

11.

Unity2022.2での変化

12.

Unity2022.2から大きく変化 ● NavMeshComponentsという別リポジトリで開発されていた機 能が入った ● NavMeshの生成の仕方が変わった ● 古い方はまだ使える ○ ある程度併用もできそう

13.

Unity2022.1以前 ● デフォルトでプロジェクトに含まれている ● Navigation Staticが入ったメッシュ を対象にNavMeshが生成 される ● Window>AI>Navigationタブからまとめて操作 ○ NavMeshのBake ○ オブジェクトごとにエリア分け

14.

Unity2022.1以前

15.

2022.2以降で古い方は使える? ● 一応使える ● StaticのEverythingにチェックを入れて無理やり設定 ● Window>AI>Navigation(Obsolete)タブからBake ● 一部コンポーネントもそのまま使える ○ Agent、Obstacle、Link ● 新しい方式へのConverterあり

16.

2022.2以降で古い方は使える?

17.

新しくでできるようになったこと ● ルールに基づいたエリアの設定とNavMeshのBake ● 任意のテレポートの作成 ● 地形に沿った移動 ↓ 高機能で扱いやすくなった!

18.

できなくなったこと? ● NavMeshCleanerが使えなくなった…

19.

使ってみる

20.

プレイヤーを追いかける NPC NavMesh生成編 ● 移動する地面を作る ○ 一つのGameObjectの子にまとめるようにする ● 親にNavMeshSurfaceを貼り付ける ● Bakeする

21.

プレイヤーを追いかける NPC

22.

プレイヤーを追いかける NPC

23.

プレイヤーを追いかける NPC ギミック編 ● 適当なNPCのモデルの親にNavMeshAgentを貼り付ける ● スクリプトでAgentに対してSetDestination()で目的地を設定 してあげる

24.

プレイヤーを追いかける NPC

25.

各Componentなどの設定

26.

紹介するもの ● ● ● ● ● ● Area Agent NavMeshAgent NavMeshLink NavMeshSurface NavMeshObstacle

27.

Areaについて ● 経路算出の材料となる ● AreaごとにCostを設定可能 ○ 例)ここは水で遅くなるから高コストにしよう ● 単純に距離にその値が掛けられる

28.

Agentについて ● NPCの種類ごとの パラメータを設定できる ● 身長、幅、ジャンプ力など

29.

NavMeshAgentについて ● 移動速度や障害物との距離など ● 個体ごと の設定

30.

NavMeshLinkについて (テレポート ) ● 2地点を結ぶテレポートを設定可能 ● Areaを設定することが可能 ○ さらにCostを乗算調整することが可能

31.

NavMeshSurfaceについて ● Agentごとに設定 ● Areaを設定可能 ● このコンポーネントが影響を与える範囲を選択可能 ○ 全GameObject、Hierarchy、Volume、Modifire付のみ ○ Layer設定 ● 実際のメッシュベースでの移動にするか ● Bake

32.

NavMeshSurfaceについて

33.

NavMeshObstacleについて ● 動的に変更できる障害物 ● ColliderのようにAgentに干渉可能

34.

NavMeshObstacleについて ● X-NEOKETでの事例 ● 出展者が出展スペースを編集可能 ○ スペースの形状も選択できる!

35.

Tips

36.

NPCのアニメーション制御 ● NavMeshAgent.velocityを使うと楽 ○ Vector3なのでmagnitude取る ● AnimatorのParameterにSetFloat

37.

NavMeshの動的生成 ● AR Foundationで環境メッシュを生成する場合 ● 生成されたメッシュを対象としたNavMeshSurfaceを配置 ○ Collect ObjectsをAll Game Objectsにするとか ● NavMeshSurface.BuildMesh()を呼ぶだけ

38.

NavMeshの動的生成

39.

NavMeshをきれいに Bakeするには ● 専用のメッシュを用意する ○ 目に見えるメッシュで作るとかなりぐちゃぐちゃに… ● できるだけCubeだけで作る ○ 頂点を減らす ● 段差は無くし、スロープにする

40.

まとめ

41.

まとめ ● Unity2022から使いやすくなった! ● 手軽にNPC動かせる ● VRChatでも動く!