Unity游戏开发——新发教你做游戏(五):导航系统Navigation

阅读: 评论:0

Unity游戏开发——新发教你做游戏(五):导航系统Navigation
⽂章⽬录
⼀、前⾔
⼆、通过Navigation实现⾓⾊移动区域的限制
NavMesh(导航⽹格)是3D游戏世界中⽤于实现动态物体⾃动寻路的⼀种技术,将游戏中复杂的结构组织关系简化为带有⼀定信息的⽹格,在这些⽹格的基础上通过⼀系列的计算来实现⾃动寻路。
汽车防尘罩2.1、烘焙地⾯,⽣成NavMesh
将带有 MeshRenderer和 Collider组件的地形设置为 Navigation Static。
然后点击菜单Window - AI - Navigation
此时会打开Navigation窗⼝,点击Bake分页,再点击Bake按钮即可开始烘焙地⾯。
烘焙成功,即可看到地⾯上出现⼀个蓝⾊的⽹格,场景⽬录中也可以看到⽣成了⼀个NavMesh(导航⽹格)⽂件。
彩钢板屋顶
我可以添加⼀些Cube作为障碍物,然后重新烘焙。(注意Cube也要设置为 Navigation Static)
2.2、主⾓挂上NavMeshAgent
我们在主⾓上挂上NavMeshAgent主⾓,移动主⾓,会发现主⾓只能被限制在NavMesh⽹格中移动。
由于我们是通过摇杆来控制⾓⾊移动,所以没有⽤到⾃动寻路,只是⽤NavMeshAgent来限制⾓⾊的移动范围。不过也还是顺带说⼀下⾃动寻路的具体操作。
三、通过Navigation实现⾃动寻路
⾓⾊⾝上挂了NavMeshAgent组件,我们就可以调⽤NavMeshAgent的SetDestination的⽅法实现⾃动寻路了。例:
navAgent.SetDestination(targetPos);
如何实现⿏标点击某个点,让⾓⾊⾛过去呢。
思路
⿏标点击,从摄像机处发出射线检测,与地⾯碰撞得到⼀个⽬标坐标,然后调⽤SetDestination接⼝。
具体代码
如下,将脚本挂在主⾓⾝上
CO2封存
//AutoPathFinding.cs 挂在⾓⾊的gameobject上
using UnityEngine;
空包弹助退器using UnityEngine.AI;
public class AutoPathFinding : MonoBehaviour
粉煤灰水泥{
private NavMeshAgent m_navAgent;
private Transform m_selfTrans;
private Vector3 m_targetPos;
private bool m_isMoving =false;
void Awake()
{
// 给⾓⾊挂上NavMeshAgent组件
m_navAgent = gameObject.GetComponent<NavMeshAgent>();
m_selfTrans = transform;
}
void Update()
{
if(input.GetMouseButton(0))
{
Ray ray = Camera.main.usePosition);            RaycastHit hit;
声波识别if(Physics.Raycast(ray,out hit))
{
m_targetPos = hit.point;
// ⾃动寻路移动到⽬标点
m_navAgent.SetDestination(m_targetPos);
m_isMoving =true;
}
}
if(Vector3.Distance(m_selfTrans.position, m_targetPos)<=0.1f)
{
m_isMoving =false;
}
}
}
效果如下
好了,下⼀篇我将讲讲UGUI摇杆的具体实现。

本文发布于:2023-05-18 16:33:55,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/104251.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实现   移动   烘焙   寻路
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图