一、前言
文章列表
Unity游戏开发——新发教你做游戏(一):打开游戏开发新世界的大门
Unity游戏开发——新发教你做游戏(二):60个Unity免费资源获取网站
Unity游戏开发——新发教你做游戏(三):3种资源加载方式
Unity游戏开发——新发教你做游戏(四):角色移动控制
Unity游戏开发——新发教你做游戏(五):导航系统Navigation
Unity游戏开发——新发教你做游戏(六):教你2个步骤实现摇杆功能
Unity游戏开发——新发教你做游戏(七):Animator控制角色动画播放
本工程
Demo
我已上传到GitHub
,感兴趣的同学可以下载下来学习。GitHub
工程地址:https://github.com/linxinfa/Unity-RpgGameDemo嗨,大家好,我是新发,上一篇文章我们讲了角色移动控制。最后提出了个问题,限制角色在地图中移动,而不会超出地图外面?这篇文章我就来说下实现方案:
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
接口。
具体代码
如下,将脚本挂在主角身上
//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.ScreenPointToRay(Input.mousePosition);
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
摇杆的具体实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。