Unity 实用教程之 Nav导航箭头路线绘制生成

 时间:2024-10-22 14:58:38

1、打开Unity,新建一个空工程,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成

2、在场景中,简单的布置一些环境物体,并设置为 Static,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成
Unity 实用教程之 Nav导航箭头路线绘制生成

3、在顶部菜单栏 Window - Navgation, Bake 环境,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成
Unity 实用教程之 Nav导航箭头路线绘制生成

4、在工程中,新建一个脚本 ArrowFindPath,右键 Open C# Project 打开脚本,进行编辑,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成

5、ArrowFindPath 脚本的具体代码和代码解释如下图

Unity 实用教程之 Nav导航箭头路线绘制生成
Unity 实用教程之 Nav导航箭头路线绘制生成
Unity 实用教程之 Nav导航箭头路线绘制生成

6、ArrowFindPath 脚本具体粝简肯惧内容如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUn足毂忍珩ityEngine;usingUnityEngine.AI;publicclassArrowFindPath:MonoBehaviour{privateNavMeshAgent_navPlayer; privateNavMeshPath_navPath; publicfloattileSpacing=0.5f; publicLineRendererlineGameObject;publicGameObjectdirectionPrefab; privateList<GameObject>arrowList=newList<GameObject>();//Usethisforinitialization voidStart(){ _navPlayer=transform.GetComponent<NavMeshAgent>(); _navPath=newNavMeshPath(); }//Updateiscalledonceperframe voidUpdate(){ if(Input.GetMouseButtonDown(0)){ Rayray=Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHithit; if(Physics.Raycast(ray,outhit,Mathf.Infinity)){ print("hit:"+hit.point); _navPlayer.SetDestination(hit.point); NavMesh.CalculatePath(transform.position,hit.point,NavMesh.AllAreas,_navPath); DrawPath(_navPath); } } }///<summary> ///Drawsthepath. ///</summary> ///<paramname="navPath">Navpath.</param> voidDrawPath(NavMeshPathnavPath) { List<GameObject>arrows=arrowList; StartCoroutine(ClearArrows(arrows)); arrowList.Clear(); //Ifthepathhas1ornocorners,thereisnoneedtodrawtheline if(navPath.corners.Length<2) { print("navPath.corners.Length<2"); return; }//Setthearrayofpositionstotheamountofcorners... lineGameObject.positionCount=navPath.corners.Length; Quaternionplanerot=Quaternion.identity; for(inti=0;i<navPath.corners.Length;i++) { //Gothrougheachcornerandsetthattothelinerenderer'sposition... lineGameObject.SetPosition(i,navPath.corners[i]); floatdistance=0; Vector3offsetVector=Vector3.zero; if(i<navPath.corners.Length-1) { //planerotationcalculation offsetVector=navPath.corners[i+1]-navPath.corners[i]; planerot=Quaternion.LookRotation(offsetVector); distance=Vector3.Distance(navPath.corners[i+1],navPath.corners[i]); if(distance<tileSpacing) continue;planerot=Quaternion.Euler(90,planerot.eulerAngles.y,planerot.eulerAngles.z);//planepositioncalculation floatnewSpacing=0; for(intj=0;j<distance/tileSpacing;j++) { newSpacing+=tileSpacing; varnormalizedVector=offsetVector.normalized; varposition=navPath.corners[i]+newSpacing*normalizedVector; GameObjectgo=Instantiate(directionPrefab,position+Vector3.up,planerot); arrowList.Add(go); } } else { GameObjectgo=Instantiate(directionPrefab,navPath.corners[i]+Vector3.up,planerot); arrowList.Add(go); } } }///<summary> ///Clearsthearrows. ///</summary> ///<returns>Thearrows.</returns> ///<paramname="arrows">Arrows.</param> privateIEnumeratorClearArrows(List<GameObject>arrows) { if(arrowList.Count==0) yieldbreak;foreach(vararrowinarrows) Destroy(arrow); }}

7、在场景中添加一个 Capsule,并在上面添加一个 NavMeshAgent,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成

8、在场景中,新建一个 GameObject,命名为 LineRenderer,并在上面添加一个LineRenderer组件,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成

9、导入一个箭头的 图片,并修改成精灵图,拖到场景中,调整好合适的精灵图比例,在拖到工程中,作为预制体,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成
Unity 实用教程之 Nav导航箭头路线绘制生成

10、选中场景中的 Capsule,添加脚本ArrowFindPath,赋值 LineRenderer 和 箭头预制体,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成

11、运行场景,在场景中随便点击们就会生成,箭头路线,具体如下图

Unity 实用教程之 Nav导航箭头路线绘制生成

12、到此,《Unity 实用教程之 Nav导航箭头路线绘制生成》讲解结束,谢谢

  • 3dmax做人物运动如何添加关键帧?
  • C4D管道模型怎么改成平面圆圈?
  • C4D缩放工具使用方式不同调出的模型状态不同
  • AE怎样可以把喷气流融入画面里
  • Ae如何添加CC Tiler并调整参数
  • 热门搜索
    植树节手抄报 环保手抄报内容 感恩父母手抄报 红领巾心向党手抄报 爱国手抄报 党在我心中手抄报 元宵节手抄报内容 关于清明的手抄报 防控疫情手抄报 祭英烈手抄报