Unity--自动寻径

本文详细介绍了如何在Unity中实现自动寻径功能。包括创建地形、添加角色、设置障碍物及烘焙场景等步骤,并演示了如何通过脚本实现点击目标后的自动寻路。此外,还介绍了如何使用动态障碍物及寻路网格层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎大家关注我的日志,今天介绍下自动寻径:

一、MMO - Massively Multiplayer Online,大型多人在线。

现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用Unity来开发手游,自动寻路可以有很多种实现方式。

我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。

1.创建地形

2.添加角色

3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。

4.选中地形,在Navigation窗口中,设置Navigation Static

5.依次选中障碍物,在avigation窗口中,设置Navigation Static

6.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了

7.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent

8.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能

private NavMeshAgent agent;
private Animator anim;
void Start () {
agent =GetComponent <NavMeshAgent >();
anim =GetComponent <Animator>();
}

// Update is called once per frame
void Update () {
RaycastHit hit;
if(Input .GetMouseButtonDown (0)){
Ray ray=Camera.main.ScreenPointToRay (Input.mousePosition );
if (Physics .Raycast (ray,out hit)){
agent.SetDestination (hit.point );
}
}
if (agent.remainingDistance == 0) {

idle ();

else {

walk ();
}
}
void idle(){
anim.SetFloat("idle", 1F);
anim.SetFloat("walk", 0.0F);
anim.SetFloat("run", 0F);


}
void walk(){

anim.SetFloat("idle", 0F);
anim.SetFloat("walk", 1F);
anim.SetFloat("run", 0F);


}
void run(){
anim.SetFloat("idle", 0F);
anim.SetFloat("walk", 0.0F);
anim.SetFloat("run", 1F);
}

          

二、 之前我们都是用固定的物体作为障碍物,然后烘焙场景。

Unity还提供了动态的障碍物。任何一个GameObject都可以添加Navmesh Obstacle组件,变成一个障碍物。具体步骤是Component->Navigation->Navmesh Obstacle.它有两个属性:半径和高度,可以设置跟你的物品差不多的体积大小。

1、设置Navigation里面BakeDrop Height的值

2、勾选Navigation里面ObjectOffMeshLink Generatic

3Bake

 

三、寻路网格层的应用

1、把Navigation里面BakeDrop Height的值设为0

2、取消勾选Navigation里面ObjectOffMeshLink Generatic

3Bake

4、在Navigation里面Layers创建两个Layers(LayersUp  LayersDown)-->Bake

5、选中巨魔,设置巨魔属性(NavMesh Walkable Default  LayersUpLayersDown

 

如果大家还有什么困难的话可以关注我的日志:

http://unity.gopedu.com/home.php?mod=space&do=blog&view=me

 

还可以关注我们的狗刨网:

http://unity.gopedu.com/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值