之前在学习Unity的时候,曾经学习过自动寻路,不过当时只能强撑着认为自己懂了。现在项目中也有自动寻路,虽然不是自己做的,不过正好学习一下。在网上学习了下,自动寻路会有以下几种
- A星寻路 :核心是A星寻路算法,可以在网上下载插件使用,具体可以 参考这个链接https://blog.csdn.net/hasion/article/details/41284301
- Itween插件,寻路:之前都不知道使用Itween插件可以寻路,需要将路径点全都 存储起来, 赛车 游戏可以用这个
using UnityEngine; using System.Collections; public class loadway : MonoBehaviour { //paths是我们的路径点,一个一个的拼接起来构成最终的路径 public Transform[] paths; void Start () { Hashtable args = new Hashtable();//哈希表 //设置路径点 args.Add("path",paths); //设置线性效果 args.Add("easeType",iTween.EaseType.linear); //设置速度 args.Add("speed",10f); //移动的整体时间 //args.Add("time",5f); //移动过程中面始终朝向一点 args.Add("looktarget",Vector3.zero); //是否从原始位置走到第一个点的位置 args.Add("movetopath",true); //延迟 args.Add("delay",0.1f); //循环类型 args.Add("loopType","pingpong");//有none,loop,pingpong这三种 //让模型当面向着跑去的方向 args.Add("orienttopath",true); iTween.MoveTo(gameObject,args); } void OnDrawGizmos()//绘制 { iTween.DrawLine(paths,Color.yellow); iTween.DrawPath(paths,Color.red); } }
- 这个就是当初学习使用的方式 Unity自带的NavMeshAgent 使用很方便
**选中场景中的对象物体,将Static设置为Navigation Static复选框,unity就会通过选中的对象生成导航网格 -
//思路:自动寻路是根据场景中NavMeshAgent的功能,来自于AI的引用集。利用渲染以后的目标的位置设置来跟踪目标的位置 //注意点:此方法中旧的stop和resume方法已经弃用了 代码: // 1.设置追踪点 private NavMeshAgent agent; private Transform player; //2.设置目标点 void Awake(){ agent=this.GetComponent<NavMeshAgent>(); //3.初始化追踪点 } void Start(){ player=GameObject.FindGameObjectWithTag("Player").transform; //4.初始化目标点 } void Updata(){ if(Vector3.Distance(transform.position,palyer.position)<3f){ //6.判断如果目标点的位置小鱼2f的时候 agent.isStop=true; //6.1追踪点停止追踪 }else{ agent,isStop=false; //6.2追踪点开始追踪 agent.SetDestination(palyer.position); //5.设置追踪点的目标位置 } }