📜  unity agent bake 不定向网格 - C# (1)

📅  最后修改于: 2023-12-03 15:35:28.991000             🧑  作者: Mango

Unity Agent Bake 不定向网格 - C#

Unity Agent Bake 不定向网格是一个用于 Unity 引擎的工具,用于创建可用于导航的多边形网格。本文将向程序员介绍如何在 Unity 中使用 Agent Bake 不定向网格工具,并提供一些使用示例和代码片段。

Agent Bake 不定向网格的使用
准备工作

在使用 Agent Bake 不定向网格之前,您需要在 Unity 项目中创建一个 NavMesh Agent 组件。在 Unity 编辑器中选择一个游戏对象,在 Inspector 窗口中添加一个 NavMesh Agent 组件(Add Component -> Navigation -> NavMesh Agent)。

创建不定向网格
  1. 在 Unity 编辑器中,转到 Window 菜单下的 AI 子菜单,选择 Navigation
  2. 在 Navigation 窗口中,选择 Bake 选项卡。
  3. 在导航模式下,选择 Navigation Static
  4. 在 NavMesh Agent 属性部分,将 Agent Type 设置为您正在使用的 NavMesh Agent。
  5. 调整其他属性(例如 Walkable Mask,它决定哪些表面可用于导航)并按下 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 中创建出色的导航系统。