Unity中自动寻路的几种方法(三)
来源:互联网 发布:python buffer object 编辑:程序博客网 时间:2024/06/06 05:53
现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用Unity来开发手游,自动寻路可以有很多种实现方式。第一种比较传统的是使用A星寻路,它是一种比较传统的人工智能算法,在游戏开发中比较常用到。大部分的页游和端游都用到这种技术。在Unity游戏也可以用这种技术,Asset Store上面已经有相关的组件了,感兴趣的同学可以自己去了解。我在后面有机会再来详细介绍了。今天我们来学习Unity官方内置的寻路插件-Navmesh。由于内容比较多,我们将分几次来系统学习。今天先通过学习一个最简单的例子来入门。
- 实例
- 步骤
2.添加角色
3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。
4.选中地形,在Navigation窗口中,设置Navigation Static
5.依次选中障碍物,在avigation窗口中,设置Navigation Static
7.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了
8.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent
9.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能
using UnityEngine;using System.Collections;//Author:ken@iamcoding.compublic class PlayerController : MonoBehaviour{ private NavMeshAgent agent; void Start() { //获取组件 agent = GetComponent<NavMeshAgent>(); } void Update() { //鼠标左键点击 if (Input.GetMouseButtonDown(0)) { //摄像机到点击位置的的射线 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //判断点击的是否地形 if (!hit.collider.name.Equals("Terrain")) { return; } //点击位置坐标 Vector3 point = hit.point; //转向 transform.LookAt(new Vector3(point.x, transform.position.y, point.z)); //设置寻路的目标点 agent.SetDestination(point); } } //播放动画,判断是否到达了目的地,播放空闲或者跑步动画 if (agent.remainingDistance == 0) { animation.Play("idle"); } else { animation.Play("run"); } }}
完成了,可以看看效果:
- 相关知识
Radius 半径: 代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)。
Speed 速度: 代理可以周游世界,走向它的目的地的最大移动速度。
Acceleration 加速度: 最大加速度。
Angular Speed 角速度: 最高转速(度/秒)。
Stopping distance 制动距离:制动距离。到目的地的距离小于这个值,代理减速。
Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks
Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
Height 高度:代理的高度(用于调试图形)。
Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到。
2.障碍物一定要有Mesh Render,用于烘焙寻路网格。
- 总结
怎么办?在下面的文章中,我们将会继续探寻其他强大的功能。
- 源码
http://pan.baidu.com/s/1hqC6v4o
- 参考资料
1.http://www.xuanyusong.com/
2.http://liweizhaolili.blog.163.com/
3.http://game.ceeger.com/Components/class-NavMeshAgent.html
原文地址http://blog.csdn.net/janeky/article/details/17457533
0 0
- Unity中自动寻路的几种方法(三)
- Unity中自动寻路的几种方法(一)
- Unity中自动寻路的几种方法(二)
- Unity中使物体自动寻路的方法
- Unity中添加组件的几种方法
- Unity中添加组件的几种方法
- Unity中添加组件的几种方法
- Unity中添加组件的几种方法
- Unity中添加组件的几种方法
- Unity中移动物体的几种常用方法
- Unity中打开文件窗口(OpenFileDialog)的几种方法对比
- [Unity-25] Unity中让游戏对象消失或隐藏的几种方法
- unity中消息传递的三种方法
- 关于Unity的几种优化方法
- Unity几种查找物体的方法
- unity 提升画质的几种方法
- Unity中计算某一个方法的耗时的几种方法
- Android中去掉标题栏的几种方法(三种)
- 17.Spring_使用NamedParameterJdbcTemplate
- [android自定义控件]带有图片的Toast
- Android读取excel文件小结(读取大数据量的excel文件)
- 手机号码正则验证(试用版)
- 对于如何生成一个唯一的标示---UUID
- Unity中自动寻路的几种方法(三)
- [GDI+]DrawRectangle和FillRectangle,细节决定成败
- Excel用vba自动生成word
- Linux下安装JDK
- iOS第三方库-CocoaLumberjack-DDLog
- 编译错误:named type definition in parentheses解决方案
- 关于localStorage和sessionStorage的用法
- 自定义bash提示符 -- Bash prompt basics
- phoneGap2.9.0环境搭建