unity 2dunity3d 自动寻路路要俯视吗

Unity2D地图及寻路功能实现思路讨论?
小弟新手,在Unity2d时有个问题,比如制作一个2D的ARPG游戏,我希望敌人能够避开障碍物寻路来追我,这里如何实现?是先预设一个二维数组,用0和1代表道路和障碍么?但是这样,是不是地图该分为两层?一层是网格记录0和1,一层是用于显示的地图?
要评论请先&或者&Unity手游之路&九&自动寻路Navmesh之高级主题 - CSDN博客
Unity手游之路&九&自动寻路Navmesh之高级主题
之前我们一起学习了如何使用Navmesh组件来实现最基本的角色自动寻路。今天我们再继续深入探索Navigation组件的高级功能。在本文中,你将了解到如何在两个隔离层自动生成寻路网格?如何手动指定寻路网格的路线?以及寻路网格层的应用。(本文所用到的模型皆来自Unity3d官网)。
(转载请注明原文地址)
隔离层自动生成寻路网格
(源码scene1.unity)
1.创建Plane实例P1,P2,两者之间出现一条鸿沟。直接控制角色位移是无法通过的。
2.打开Navigation窗口,分别选中P1,P2,分别设置Navigation Static 和OffMeshLink Generatic
3.保存场景,点击场景烘焙按钮Bake。结束后我们可以看到P1,P2除了自身生产寻路网格外,它们直接还生成了连接纽带。
4.添加角色模型Solder,为其添加NavMeshAgent(Component-&Navigation-&NavMeshAgent)
5.给Solder添加PlayerController脚本
using UnityE
using System.C
public class PlayerController : MonoBehaviour
private NavMeshA
public bool setAgentWalkM//是否需要动态修改寻路层,在scene4的实例中要用到
void Start()
//获取寻路组件
agent = GetComponent&NavMeshAgent&();
void Update()
//鼠标左键点击
if (Input.GetMouseButtonDown(0))
//摄像机到点击位置的的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
//判断点击的是否地形
if (!hit.collider.tag.Equals(&Plane&))
//点击位置坐标
Vector3 point = hit.
transform.LookAt(new Vector3(point.x, transform.position.y, point.z));
//设置寻路的目标点
agent.SetDestination(point);
//播放动画
if (agent.remainingDistance == 0)
animation.Play(&Idle&);
animation.Play(&Run&);
}5.点击任意的位置,可以看到角色都能自动寻路过去
手动指定寻路网格方向
源码scene2.unity
1.scene1.unity的基础上,将P1,P2的OffMeshLink Generatic去除
2.在P1上新建一个空的GameObject Start,P2上新建一个空的GameObject End
3.选中start,为它添加Off Mesh Link组件 Component-&Navigation-&OffMeshLink
4.设置Off Mesh Link组件的属性,Start Point 为 start,End Point为end
5.烘焙场景。我们可以看到有一条纽带从start指向end
点击地图,可以看到角色如果要跨越P1和P2,一定是沿着我们手动创建的路径
导航网格障碍物 Navmesh Obstacle
之前我们都是用固定的物体作为障碍物,然后烘焙场景。Unity还提供了动态的障碍物。任何一个GameObject都可以添加Navmesh Obstacle组件,变成一个障碍物。具体步骤是Component-&Navigation-&Navmesh Obstacle.它有两个属性:半径和高度,可以设置跟你的物品差不多的体积大小。
寻路网格层的应用
源码scene3.unity
玩过“3c”,“dota”这类游戏的同学都知道:地图上有上中下三条大道,不同的兵可能去的路不同。今天我们也做个类似的实例。
1.新建P1,P2,P3,P4等4个Plane,具体摆设形状见效果图
2.在Navigation窗口中,添加两个层Layers:Blue层和Red层
3.P1,P2的Navigation Layer设置为Default,P4的Navigation层设置为Red,P3设置为Blue
4.添加两个角色,设置他们的NavMeshAgent寻路层(NavMesh Walkable)。一个将Red层去掉,一个将Blue层去掉
5.点击P2的坐标,可以看到他们沿着不同的路径去目标点,一个走上层路线,一个走下层路线了。
动态改变寻路网格层
源码scene4.unity
在游戏中,我们很多时候都是需要根据不同的条件,选择不同的寻路路径。
1.在scene3.unity基础上做一下修改。只保留一个角色
2.新增两个按钮,“走上层”和“走下层”,在游戏运行时,可以改变Agent的寻路层。
//动态设置寻路路径层
void OnGUI()
if (!setAgentWalkMask)
if (GUI.Button(new Rect(0, 0, 100, 50), &走下层&))
agent.walkableMask = 65;
if (GUI.Button(new Rect(0, 100, 100, 50), &走上层&))
agent.walkableMask = 129;
3.重新点击寻路,可以看到,选择不同的寻路层,角色的寻路路径也不同
看到代码中的agent.walkableMask = 65和129,大家会比较迷惑,其实寻路层每一层都是2的幂,见下图
所以上层的mask = Default(1)+Blue(128) = 129,下层的mak = Default(1)+Red(64) = 65
本文将寻路组件的各个细节都做了一次梳理,详细能帮大家熟练掌握各个特性,在实际项目中根据不同的需求熟练选择应用相关的特性。接下来我还会有一个更加详细的实例来贯穿所以的Navmesh特性,敬请期待!
2.http://liweizhaolili./
3./Components/class-NavMeshAgent.html
本文已收录于以下专栏:
相关文章推荐
NavMesh(导航网格)是3D游戏世界中用于动态物体实现自动寻路的技术。
NavMesh系统是人工智能的一种,它使用一个添加在游戏对象上或者作为游戏对象父物体的名为“导航网格代理”(NavMeshA...
Navigation系统的使用原理
NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计...
unity自带寻路组件navigation初学。
/blog/lightmapping-in-unity-5/
In Unity3D, scenes can benefit greatly f...
Building a NavMesh
在Unity中,NavMesh
的生成操作需要Navigation窗口(在Window& Navigation)
在你的场景中构建NavMesh只需要4个步骤...
前提:随着Unity5.6的推出,我们终于迎来了NavMesh的动态烘培,我们期待已久的功能终于来了,不用再研究A*算法了,话说改进的网格寻路更加方便高效。
Unity5.6 更新概要(中文版):h...
领导让做个动态寻路的效果,而不是简单的自动寻路。
意思是,首先Monster 检测hero的位置先自动寻路,如果hero位置不改变,说明刚才的寻路路径是正确的;如果hero位置改变,但是改变后的位置依...
使用unity5.6新功能实现 实时动态烘培NavMesh
Unity中对于寻路导航算法进行了封装,支持提交将地图进行导航烘焙如果想在两个不连续的平面之间加一个吊桥,在桥放平时可以使物体通过吊桥,而桥抬起时物体在桥边等待。
1. 给桥的加一个旋转中心如...
在寻路计算中,每个连通点都有个代价属性,在实时A*时根据代价估算决定这个这点是否丢进个行走路点队列中。
For examples:
1. 如果陆地网格的代价是1,河流代价是5,从 A点 到 B...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)ARPG角色控制及自动寻路 For 2D
本课程包含a*寻路以及 2d角色控制,是UGUI的实战教程
从事游戏行业4年,擅长U3d开发,客户端构架,格斗游戏开发,目前专注于游戏终端手游研发。
info@youke.pro}

我要回帖

更多关于 unity 2d 寻路 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信