---
title: NavMesh完全理解_公開版
tags: 
author: [サックー](https://www.docswell.com/user/sack-kazu)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GEWP3PGWJ2.jpg?width=480
description: IwakenLab Tech Conference 2024で発表した資料の公開向け版です 一部スライドの削除と、未使用スライドの追加を行いました
published: November 17, 24
canonical: https://www.docswell.com/s/sack-kazu/5G1QMX-2024-11-17-190850
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GEWP3PGWJ2.jpg)

NavMesh完全理解
サックー


# Page. 2

![Page Image](https://bcdn.docswell.com/page/47ZKVKL273.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YJ6Q5QM6JV.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJ5RYRZ574.jpg)

NavMeshとは何か


# Page. 5

![Page Image](https://bcdn.docswell.com/page/9E2DGDRGER.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/D7Y2V2DG7M.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/VEN8M868J8.jpg)

実演


# Page. 8

![Page Image](https://bcdn.docswell.com/page/Y79KNKLX73.jpg)

実際の事例


# Page. 9

![Page Image](https://bcdn.docswell.com/page/G78RKRX9ED.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/L7LKZK8MER.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4EM2V266EW.jpg)

Unity2022.2での変化


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PERM2MPN79.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/P7XVDV38JX.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/37KQXQYL7D.jpg)

Unity2022.1以前


# Page. 15

![Page Image](https://bcdn.docswell.com/page/LJ3P5P9675.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/8JDLDLGM7G.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/VEP2X23QE8.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/27VDLD4P7Q.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/5JGYXY1QJL.jpg)

使ってみる


# Page. 20

![Page Image](https://bcdn.docswell.com/page/47QM8MDWEP.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/KE4V2VZ171.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/L713M3R5EG.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/G7WP3P1WE2.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/4JZKVKP2J3.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/YE6Q5Q46EV.jpg)

各Componentなどの設定


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GE5RYRQ5J4.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/972DGDPG7R.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/DJY2V25GJM.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/V7N8M8N8E8.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/YJ9KNKRXJ3.jpg)

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


# Page. 31

![Page Image](https://bcdn.docswell.com/page/GJ8RKRW97D.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/LJLKZKNM7R.jpg)

NavMeshSurfaceについて


# Page. 33

![Page Image](https://bcdn.docswell.com/page/47M2V2X67W.jpg)

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


# Page. 34

![Page Image](https://bcdn.docswell.com/page/P7RM2MNNJ9.jpg)

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


# Page. 35

![Page Image](https://bcdn.docswell.com/page/PJXVDVN8EX.jpg)

Tips


# Page. 36

![Page Image](https://bcdn.docswell.com/page/3JKQXQNLJD.jpg)

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


# Page. 37

![Page Image](https://bcdn.docswell.com/page/LE3P5PV6J5.jpg)

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


# Page. 38

![Page Image](https://bcdn.docswell.com/page/8EDLDL8MJG.jpg)

NavMeshの動的生成


# Page. 39

![Page Image](https://bcdn.docswell.com/page/V7P2X28Q78.jpg)

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


# Page. 40

![Page Image](https://bcdn.docswell.com/page/2JVDLDNPJQ.jpg)

まとめ


# Page. 41

![Page Image](https://bcdn.docswell.com/page/5EGYXYKQEL.jpg)

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


