
今天研究了下Unity3D的寻路功能,忽然发现Unity3D自带的寻路功能只支持付费版,内心不禁感到一阵失落。后来在宣雨松的博客上看到一篇关于ITween的文章,我发现这简直就是我等使用Unity免费版的福音啊,因为这个插件可以解决我们今天的寻路问题。压抑不住内心的激动,博主到ITween官网下载了这个插件,结合官方的例子,产生了ITween实现寻路功能的想法。具体说来,寻路功能就是为玩家或者游戏中的角色添加的一种AI,目的是在给定起点和终点后,程序可以帮助玩家或者游戏角色快速地找到最优的一条线路,复杂点的寻路系统可能还要考虑如何避开障碍物,那么好,现在我们开始一起走进寻路之旅!
首先创建如图所示的游戏场景,在这里我们创建8个Cube来表示地面上的8个节点,我们按照一定的顺序排列这些节点,就能得到一条路线。这条路线就是我们为游戏体设计的路线。接下来,我们再创建一个Cube,赋予其黑色的材质,以示区别。
接下来我们导入ITween 资源包文件,导入完成后,创建下面的脚本文件:
∙using UnityEngine;
∙using System.Collections;
∙
∙public class ScriptControl : MonoBehaviour {
∙
∙ //节点数组
∙ public Transform[] paths;
∙
∙ void Start ()
∙ {
∙ Hashtable args = new Hashtable();
∙ //设置路径的点
∙ args.Add("path",paths);
∙ //设置类型为线性,线性效果会好一些。
∙ args.Add("easeType", iTween.EaseType.linear);
∙ //设置寻路的速度
∙ args.Add("speed",8f);
∙ //移动的整体时间。如果与speed共存那么优先speed
∙ args.Add("time",5f);
∙ //是否先从原始位置走到路径中第一个点的位置
∙ args.Add("movetopath",true);
∙ //延迟执行时间
∙ args.Add("delay", 0.1f);
∙ //移动的过程中面朝一个点
∙ args.Add("looktarget",Vector3.zero);
∙ //三个循环类型 none loop pingPong (一般 循环 来回)
∙ args.Add("loopType", "loop");
∙ //是否让模型始终面朝当面目标的方向
∙ //如果你发现你的模型在寻路的时候时钟都是一个方向那么一定要打开这个
∙ args.Add("orienttopath",true);
∙
∙ //让模型开始寻路
∙ iTween.MoveTo(gameObject,args);
∙ }
∙
∙
∙ void OnDrawGizmos()
∙ {
∙ //在scene视图中绘制出路径与线
∙ iTween.DrawLine(paths,Color.yellow);
∙ iTween.DrawPath(paths,Color.red);
∙ }
∙
∙ void Update ()
∙ {
∙
∙ }
∙}
我们将该脚本绑定到我们的游戏体——黑色的Cube上,打开属性面板,编辑Paths属性,这时我们按照事先设计的路径节点顺序,将各节点拖放到下面的属性框中,这样就完成了对于路径节点的添加。文章来自【狗刨学习网
| 】 这时我们运行游戏,将看到黑色的Cube沿着我们预先设计的路线进行运动: 同时,我们能够注意到在游戏场景视图中,游戏体运动的路径被两种颜色的线标示了出来,这就是今天的内容啦,谢谢大家! |
