首先看两个导航系统的应用:
以上使用的功能就是导航,或者叫寻路,主要具备两个特点:
既然要导航,那么必须先确定一张“地图”,确定玩家什么地方可以去、什么地方不能去。
但是需要导航就必须先简单烘培一下地图才能继续
场景烘培好后,已经确定了哪些地方角色可以前往,但是具体如何进行导航?
这就需要游戏物体身上具有 NavMeshAgent 这个组件,导航代理组件承担具体如何导航的计算。
NavMeshAgent 组件:
添加这个导航代理组件的游戏物体,身上会增加一个圆柱体形状的碰撞体
导航系统的代码相关操作都有先 using UnityEngine.AI 命名空间
navMeshAgent.SetDestination(Vector3 position):设置导航,填写目标位置navMeshAgent.isStopped:获取和修改,是否停止导航using UnityEngine.AI;
public class NavMeshAgentTest : MonoBehaviour
{
private NavMeshAgent navMeshAgent;
public Transform target;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
}
void Update()
{
navMeshAgent.SetDestination(target.position);
if(Input.GetKeyDown(KeyCode.Space))
{
agent.isStopped = !agent.isStopped;
}
}
}
导航面板分为4个部分:
Agents ,用于对需要进行导航的角色进行分类,默认有一个 Humanoid,也就是人类。
但是常规情况下,导航网格并不基于这个生成。
主要设置:
选中一个游戏物体后,Object面板中会出现一定的变化,我们会发现只有静态物体才可以进行 Navigation Areas(导航区域)的设置,这也意味着只有静态物体可以烘培到导航网格中去。
目前我们的导航网格,是通过将地形游戏物体设置为静态模式,然后导航烘培后实现,但是游戏中可能存在这种情况:
RTS 或 Moba 类型游戏中,可能因为玩家的建造、角色的技能,出现一个障碍物,我们右键移动角色的时候,需要避开这些障碍物。
故需要使用 NavMeshObstacle 组件。
要使用这个组件就直接给游戏物体添加这个组件即可。
参数:
应用之前学习的动画系统、射线、导航系统等知识来完成一个点击移动的小案例。
using UnityEngine.AI;
public class NavigationTest : MonoBehaviour
{
private Animator animator;
private NavMeshAgent agent;
void Start()
{
animator = GetComponent<Animator>();
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
if(Input.GetMouseButtonDown(1))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hitinfo, 1000))
{
Debug.DrawLine(ray.origin, hitinfo.point, Color.red);
agent.SetDestination(hitinfo.point);
animator.SetBool("IsWalk", true);
agent.isStopped = false;
}
}
if(Vector3.Distance(transform.position, agent.destination) <= agent.stoppingDistance)
{
animator.SetBool("IsWalk", false);
agent.isStopped = true;
}
}
}
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...