标签:unity3d
领导让做个动态寻路的效果,而不是简单的自动寻路。
意思是,首先Monster 检测hero的位置先自动寻路,如果hero位置不改变,说明刚才的寻路路径是正确的;如果hero位置改变,但是改变后的位置依然在旧的寻路路径上,也说明旧的寻路路径有用;但是如果hero的位置改变,而且已经不在刚才的寻路路径上,说明需要重新寻路。
ok,说清楚了效果,关键是如果得到旧的寻路路径,只要再遍历一下就好了。
问了一些群里的大神说,这是动态寻路,用一个插件,我给链接大家可以自己研究,
http://www.narkii.com/club/forum.php?mod=viewthread&tid=328657&extra=page%3D%257Bprevpage%257D&page=3
不过,实际上我们自己也可以做。
我上一个Nav教程中写了很多关于NavMeshPath的属性,是别人翻译过来的,但是还是不全,需要自己去读原API,给链接
http://docs.unity3d.com/ScriptReference/30_search.html?q=NavMeshAgent
ok,你会找到一个
它就是,自动寻路的路径。打开之后,看到它返回一个NavMeshPath类型的路径。再看NavMeshPath类
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { float PathLength(NavMeshPath path) { if (path.corners.Length < 2) return; Vector3 previousCorner = path.corners[0]; float lengthSoFar = 0.0F; int i = 1; while (i < path.corners.Length) { Vector3 currentCorner = path.corners[i]; lengthSoFar += Vector3.Distance(previousCorner, currentCorner); previousCorner = currentCorner; i++; } return lengthSoFar; } }
using System.Collections; public class MonsterRun : MonoBehaviour { private NavMeshAgent agent; private GameObject hero; // Use this for initialization void Start () { agent = GetComponent<NavMeshAgent> (); hero = GameObject.Find ("Hero"); } // Update is called once per frame void Update () { //Debug.Log ("Monster find hero's point :" + hero.transform.position.x + " " + hero.transform.position.z); Vector3 vector=new Vector3 (hero.transform.position.x-1, transform.position.y, hero.transform.position.z-1); //Vector3 vector = hero.transform.position; transform.LookAt (vector); agent.SetDestination(vector); NavMeshPath path = agent.path; Debug.Log (vector+" "+path.corners.Length+" "+path.status); for (int i=0; i<path.corners.Length; i++) { Debug.Log(i+"= "+path.corners[i]); } } }
Unity3D-NavMeshPath动态寻路(重点补充),布布扣,bubuko.com
标签:unity3d
原文地址:http://blog.csdn.net/lihuozhiling0101/article/details/38731741