簡易ナビゲーションウェイファインディング機能
静的グリッド ナビゲーションとして選択されました
Windows======>Ai========>ナビゲーション、「ベイク」をクリック
ナビゲーション グリッド コンポーネントをキャラクターにぶら下げる
スクリプトを終了し、マウスのクリック位置をナビゲーションの終点として設定します。
using UnityEngine;
using UnityEngine.AI;
public class PalyerMovement : MonoBehaviour {
private NavMeshAgent agent;
void Start()
{
//获取角色上的NavMeshAgent组件
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
//鼠标左键
if (Input.GetMouseButtonDown(0))
{
//射线检测
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool isCollider = Physics.Raycast(ray, out hit);
if (isCollider)
{
//hit.point射线触碰的Position
//SetDestination设置下一步的位置
agent.SetDestination(hit.point);
}
}
}
}
ナビゲーションパネルのパラメータ
ベーキング
エリアの背後にはコストがあり、それが最適なルートを選択する際の重みとなります。
次のルートは近いですが比重が高いです。
ジャンプの高さと距離の影響
動的障害物
ナビゲーショングリッドプロキシコンポーネント、自動ブレーキ
動的遮断コンポーネント、動的に障害物を設定し、切断コンポーネントを確認します
分割グリッドジャンプライン
建物から飛び降りる、溝に飛び込む、ドアを開けて通過するなど、直接歩くことができないグリッド サーフェス上でナビゲーション グリッド リンクを実行するために使用されます。
ある点から別の点へジャンプする
現場の地面を確認する必要がある
開始点と終了点を設定する
実行時のナビゲーション メッシュの動的ベイク処理
以下のフォルダをプロジェクトにコピーして使用してください
再焼きが必要です
右クリックしてマップ上に立方体を生成し、レンダリングします。
using UnityEngine;
using UnityEngine.AI;
//右键在场景中新建一个Cube,重新烘焙导航网格
public class BuildNavMesh : MonoBehaviour {
public GameObject buildPrefab;
private NavMeshSurface surface;
void Start ()
{
surface = GetComponent<NavMeshSurface>();
}
void Update ()
{
// 鼠标右键点击
if (Input.GetMouseButtonDown(1))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool isCollider = Physics.Raycast(ray, out hit);
if (isCollider)
{
GameObject go = Instantiate(buildPrefab, hit.point, Quaternion.identity);
go.transform.SetParent(this.transform);
// 生成完之后立即重新烘培场景
surface.BuildNavMesh();
}
}
}
}
ナビゲーション グリッド コンポーネントをプレハブに追加し、シーンにドラッグしてグリッド コンポーネントを取り込むこともできます。