寻路大致分三种:A*(格子),waypoint(路点),navmesh(网格)寻路。这三种寻路各有优劣,这里要说的是navmesh,navmesh是比前面两种要新的寻路算法,同时也是U3D官方提供的算法。
http://www.unitymanual.com/thread-611-1-1.html
http://www.unitymanual.com/thread-613-1-1.html
http://www.unitymanual.com/thread-615-1-1.html
http://game.ceeger.com/search.php?keyboard=NavMesh
U3D跟navmesh相关的东西并不多,3个组件,一个视图:
NavMeshAgent:添加了这个组件的GO对象,都具备寻路的能力。
Radius 半径: 代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)。
Speed 速度: 代理可以周游世界,走向它的目的地的最大移动速度。
Acceleration 加速度: 最大加速度。
Angular Speed 角速度: 最高转速(度/秒)。
Stopping distance 制动距离:制动距离。到目的地的距离小于这个值,代理减速。
Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks(这个的意思是直接从连接点的这边移动到那边,一般都要自己做些处理)
Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
Height 高度:代理的高度(用于调试图形)。
Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到。(这个是设置层的,让代理对象仅仅在目标层移动)
OffMeshLink:链接点,对于比较复杂的地形来说,这种连接点还是挺有用的
End:结束
Bi Directional:双向定向
Activated:激活
比较有用的是半径和高度,拥有此组件的物体被看做为障碍物。
Navigation视图:
三个分页:object可以看做是对选中对象的操作。Bake烘焙出网格。Layers定义层,这个层在寻路的时候会起作用。
Navigation Static:勾选后,选中的对象会生成静态网格
OffMeshLink Generatic:自动生成连接点,对于有沟,有坡的地方
Navigation Layer:设置当前模型生成的静态网格的层次。
基础完整步骤:
1.创建地形和各种障碍,这个时候有两种选择,一种是通过视图界面,把这些设置为静态网格然后烘焙。另一种是通过添加组件的方式,把障碍设置为障碍。
2.创建角色,为角色添加代理组件,代理组件有个目标对象,这个目标对象是角色需要走到的位置的对象。
3.建立桥连接,同样是两种方式,一种是在视图里面勾选自动生成连接点,另一种放是为需要添加连接点的对象,添加一个连接点的组件,然后手动为组件指定两个连接点。
public class baseTest: MonoBehaviour{ private NavMeshAgent man; public Transform target; void Start (){ man = gameObject.GetComponent(); } void Update (){ man.SetDestination(target.position); } }