📅  最后修改于: 2023-12-03 15:35:28.991000             🧑  作者: Mango
Unity Agent Bake 不定向网格是一个用于 Unity 引擎的工具,用于创建可用于导航的多边形网格。本文将向程序员介绍如何在 Unity 中使用 Agent Bake 不定向网格工具,并提供一些使用示例和代码片段。
在使用 Agent Bake 不定向网格之前,您需要在 Unity 项目中创建一个 NavMesh Agent 组件。在 Unity 编辑器中选择一个游戏对象,在 Inspector 窗口中添加一个 NavMesh Agent 组件(Add Component -> Navigation -> NavMesh Agent
)。
Window
菜单下的 AI
子菜单,选择 Navigation
。Bake
选项卡。Navigation Static
。Agent Type
设置为您正在使用的 NavMesh Agent。Bake
按钮来生成 NavMesh。生成的不定向网格存储在场景中的 NavMesh
组件中。您可以使用以下代码片段访问和使用它:
using UnityEngine;
using UnityEngine.AI;
public class NavMeshTest : MonoBehaviour
{
private NavMesh navMesh;
void Start()
{
navMesh = FindObjectOfType<NavMesh>();
}
// 导航到 target 位置
public void Navigate(Vector3 target)
{
NavMeshPath path = new NavMeshPath();
if (navMesh.CalculatePath(transform.position, target, navMesh.areaMask, path))
{
NavMeshAgent agent = GetComponent<NavMeshAgent>();
agent.path = path;
agent.isStopped = false;
}
}
}
示例 1:
以下代码片段演示如何将 NavMesh Agent 移动到屏幕上指定位置:
public class MoveToClick : MonoBehaviour
{
public NavMeshAgent agent;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity))
{
agent.SetDestination(hit.point);
}
}
}
}
示例 2:
以下代码片段演示如何使 NavMesh Agent 避开障碍物:
public class AvoidObstacles : MonoBehaviour
{
public NavMeshAgent agent;
void Start()
{
agent.avoidancePriority = Random.Range(0, 100);
}
void Update()
{
RaycastHit hit;
if (Physics.Raycast(transform.position + agent.velocity.normalized, agent.velocity, out hit, agent.radius * 2))
{
agent.SetDestination(hit.normal * hit.distance + transform.position);
agent.speed = Random.Range(agent.speed * 0.9f, agent.speed * 1.1f);
}
}
}
Unity Agent Bake 不定向网格是一个强大的工具,可用于在 Unity 中创建可用于导航的多边形网格。通过使用本文中提供的示例代码和技巧,您可以最大程度地利用该工具,并在 Unity 中创建出色的导航系统。