您的位置:首页 > 移动开发 > Unity3D

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

2015-01-31 12:43 393 查看



转载: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 星寻路中使用了,限于篇幅,后面的就不仔细说明了,大家可以下载源码自行查看,最终效果如图:






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐