导航网格的生成
-
在Unity资源包中添加 AI Navigation 插件,并 Install 。
-
找到 AN 标志,勾选 Show Only Selected(可有可无,只是为了更好地看出来网格在哪)。
-
在project面板里面创建 AI->NavMesh Surface 文件。
-
双击新建的文件,点击 Back 烘焙网格。
-
勾选 Show NavMesh 显示效果,识别为是否是障碍物的依据,就是观察其身体上面是否有 Collider 组件,如果有便是障碍物存在。
-
移除某个物体为障碍物(障碍物为没有蓝色覆盖的位置)在此物体上面添加 NavMeshModifier 组件,将 Mode 修改为 Remove object。
-
点击 NavMesh Surface 文件,点击 Back 重新烘焙。
-
添加某个物品为障碍物,方法一:在其下方右键 AI->NavMesh Modifier Volume 。设置一块区域设置为障碍物的区域。
-
点击新建的 NavMesh Modifier Volume 文件,将 AreaType 改为 Not Walkable 状态。(注:每一步都要重新进行烘焙才能显示效果)(适合设置大片区域 )
-
方法二:或是在身上添加组件 NavMesh Obstacle 组件。(适合设置单个物体)
-
方法三:或是在想设为障碍物的身上添加组件 NavMesh Modifier 组件并将Mode修改为Remove object。
文章来源:https://www.toymoban.com/news/detail-859588.html -
对于房子这种装饰物,还可以通过勾选 Override Area,并将 Area Type 改为 Not Walkable 状态。
文章来源地址https://www.toymoban.com/news/detail-859588.html
通过NavMesh控制主角移动。
- 在主角身上添加一个 NavMesh Agent 组件
- 添加脚本控制主角移动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.EventSystems;
/// <summary>
/// 鼠标点击某位置移动
/// </summary>
public class PlayerMove : MonoBehaviour
{
private NavMeshAgent playerAgent;
void Start()
{
playerAgent=GetComponent<NavMeshAgent>();
}
void Update()
{
if(Input.GetMouseButtonDown(0)&&EventSystem.current.IsPointerOverGameObject()==false)//检测鼠标的点击
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//获取鼠标的位置,并在此位置上发射一条射线。
RaycastHit hit;
bool isCollide = Physics.Raycast(ray, out hit);//记录射线检测的位置和信息,并检测是否碰撞到
if (isCollide)
{
if (hit.collider.tag == "Ground")
{
playerAgent.stoppingDistance = 0;
playerAgent.SetDestination(hit.point);//获取碰撞的点
}
else if(hit.collider.tag =="Interactable")
{
hit.collider.GetComponent<InteractableObject>().OnClick(playerAgent);
}
}
}
}
}
到了这里,关于【Unity】AI-Navigation导航系统生成导航网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!