Unity3D 使用 A 星寻路(摄像机移动、缩放优化)
2015-01-31 12:43
393 查看
转载:http://www.gopedu.com/article/736
在前面发表了一篇《A 星寻路》,但是在那篇文章没有具体讲怎么使用,导致一些朋友密我,其实 A 星已经有很多成熟的插件,这主要看大家的选择了,在前面没有讲 A* 配置文件的生成,这儿我就详细的介绍了一下,可能大家也有很多不同的方法,但这儿我是通过射线检测来生成配置文件的,另外在这个例子中,我也对摄像机的移动以及缩放有一些优化。
生成 A* 寻路配置文件的原理是通过射线来检测物体的标签,如果标签是不可以行走(在这儿是 Box),就把格子位置(x,y)记为 1,否则记为 0。
测试的场景来自网络,如图:
![](http://www.omuying.com/Images/Upload/Article/image/20141126/20141126220358_2695_new.jpg)
然后我们把场景中不可以行走的地方用立方体遮挡起来,如图:
![](http://www.omuying.com/Images/Upload/Article/image/20141126/20141126220409_3163_new.jpg)
设置好遮挡之后,我们给这些立方体添加一个标签(Tag),主要是方便射线的检测,如图:
![](http://www.omuying.com/Images/Upload/Article/image/20141126/20141126220422_1445_new.jpg)
最后我们新建立一个类,取名: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 挂载到一个对象上,并设置好相关属性,如图:
![](http://www.omuying.com/Images/Upload/Article/image/20141126/20141126220508_1757_new.jpg)
运行游戏我们就可以把配置文件生成出来了,有了配置文件,我们就可以直接在 A 星寻路中使用了,限于篇幅,后面的就不仔细说明了,大家可以下载源码自行查看,最终效果如图:
![](http://www.omuying.com/Images/Upload/Article/image/20141126/20141126220659_0507_new.jpg)
相关文章推荐
- 008-实现Unity3d中使用LeanTouch插件进行触屏控制(拖拽、移动、缩放旋转...)
- unity3d移动平台优化专题(2):不要使用实时光照
- unity3d中使用DoTween来控制2D摄像机视口的移动
- 【Unity3D】【NGUI】移动设备上使用动态字体Label显示不正确
- Unity3D 控制物体移动、旋转、缩放
- unity3d和下OrtHello的使用教程 (二) 移动物体,碰撞等
- 图形图像处理-之-高质量的快速的图像缩放 补充 使用SSE2优化
- 图形图像处理-之-高质量的快速的图像缩放 补充 使用SSE2优化
- Unity3d中使用鼠标拖动物体移动
- unity3d阶段性学习脚本代码(2个是摄像机跟随(2D游戏中的),1个是角色跳跃移动脚本)
- Unity3D 控制物体移动、旋转、缩放
- Unity3D里实现物体移动到目标点,并且摄像机跟着移动的简单方案
- 使用自定义窗口以及对窗口的移动,缩放,关闭操作
- 使用手势对UIImageView进行缩放、旋转和移动(转)
- UIKit 图片的移动、位移、旋转、缩放、翻转、翻页等特效的使用
- [Unity3D]手机3D游戏开发:简单的移动和缩放鼠标手势脚本源码
- Adobe AIR迷你教程 -- 使用自定义窗口以及对窗口的移动,缩放,关闭操作
- 使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果
- 图形图像处理-之-高质量的快速的图像缩放 补充 使用SSE2优化
- iOS 使用手势UIGestureRecognizer对图像进行缩放、移动、旋转等操作