Unity3D 使用 A 星寻路(摄像机移动、缩放优化)

转载:http://www.gopedu.com/article/736

在前面发表了一篇A 星寻路》,但是在那篇文章没有具体讲怎么使用,导致一些朋友密我,其实 A 星已经有很多成熟的插件,这主要看大家的选择了,在前面没有讲 A* 配置文件的生成,这儿我就详细的介绍了一下,可能大家也有很多不同的方法,但这儿我是通过射线检测来生成配置文件的,另外在这个例子中,我也对摄像机的移动以及缩放有一些优化。

 

       生成 A* 寻路配置文件的原理是通过射线来检测物体的标签,如果标签是不可以行走(在这儿是 Box),就把格子位置(x,y)记为 1,否则记为 0。

 

       测试的场景来自网络,如图:

 


       然后我们把场景中不可以行走的地方用立方体遮挡起来,如图:

 


      设置好遮挡之后,我们给这些立方体添加一个标签(Tag),主要是方便射线的检测,如图:

 


       最后我们新建立一个类,取名:SceneDataController.cs,根据需要,这儿直接输出配置文件,类的代码如下:

using UnityEngine; 


02 using System.Collections; 


03 using System.Text; 


04   


05 /// <summary> 


06 /// 场景格子配置生成文件 


07 /// </summary> 


08 public class SceneDataController : MonoBehaviour  


09 { 


10     public int gridCols; 


11     public int gridRows; 


12   


13     public Camera mainCamera; 


14   


15     void Awake() 


16     { 


17         StringBuilder stringBuilder = new StringBuilder (); 


18         stringBuilder.Append ("private string gridText = \""); 


19   


20         for (int i = 0; i < this.gridCols; i ++)  


21         { 


22             for(int j = 0; j < this.gridRows; j ++) 


23             { 


24                 if(!ValidWalkable(j + 0.5f, i + 0.5f)) 


25                 { 


26                     stringBuilder.Append("1"); 


27                 }else{ 


28                     stringBuilder.Append("0"); 


29                 } 


30             } 


31             if(i != this.gridCols - 1) 


32             { 


33                 stringBuilder.Append("\"\n + \""); 


34             } 


35         } 


36   


37         stringBuilder.Append ("\";"); 


38   


39         Debug.Log (stringBuilder.ToString ()); 


40     } 


41   


42     private bool ValidWalkable(float posX, float posZ) 


43     { 


44         RaycastHit raycastHit = new RaycastHit (); 


45         if (Physics.Raycast (new Vector3 (posX, 100f, posZ), Vector3.down, out raycastHit))  


46         { 


47             if(raycastHit.collider.tag == "Box") 


48             { 


49                 return false; 


50             } 


51         } 


52         return true; 


53     } 


54 } 

 

 

 

 

       然后把这个 SceneDataController.cs 挂载到一个对象上,并设置好相关属性,如图:

 


       运行游戏我们就可以把配置文件生成出来了,有了配置文件,我们就可以直接在 A 星寻路中使用了,限于篇幅,后面的就不仔细说明了,大家可以下载源码自行查看,最终效果如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值