您现在的位置是:首页 >技术杂谈 >Unity 2022 版本 寻路 NavMesh网站首页技术杂谈
Unity 2022 版本 寻路 NavMesh
官方教程地址
https://docs.unity3d.com/Packages/com.unity.ai.navigation@1.1/manual/index.html
首先装包
先给地图 和 阻挡 设置为静态
然后给地上行走的地方 添加组件
可以直接bake 然后会显示蓝色的可行走路径
player 添加插件
然后给角色添加脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public UnityEngine.AI.NavMeshAgent nav; //获取导航网格代理组件,通过此组件来告知AI目标
public Transform target; //目标的位置
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
nav.SetDestination(target.position); //每帧更新目标位置
}
}
搞定
跳跃点设置
场景内添加两个圆柱体 并设置为静态 起始圆柱体添加组件 OffMeshLink
并把起始圆柱体和结束圆柱体拖入到下面的start 和 end 里
设置成功后 他俩之间会连上一根线
如果距离和位置正确 会显示粗黑色的线 并且圆柱体周围会缠绕一圈黑色的圈
如果失败了 就是浅色的 也没圈 下图是失败的样子
下图是正确的样子
设置成功后 bake一下路径就可以了
然后让你的行动目标点设置为你的结束点 也就是下面那个圆柱体 他就会自动的走到起始点 并移动过去了
你可以看到 两个平面其实是不挨着的
那下面这个平面需要添加NavMeshSurface吗?
答案是 如果你用 OffMeshLink 给他连接上 那就不需要添加了 他会自动把路径铺上
官方教程地址
https://docs.unity3d.com/Packages/com.unity.ai.navigation@1.1/manual/index.html
障碍物
Nav Mesh Obstacle
不需要设置成静态
添加这个组件后 他就变成了一个障碍物 但是路径上是看不出来的 你的主角移动的时候 也不会绕开他 而是直接顶上去
类似这样
如果你勾选了 Carve 选项
那么他会变成下面的样子 路径被开了一个口子
下面的选项 Carve Only Stationary
如果勾选上
那么只有在停下的时候 才会重新构建路径
不停的话 还是会直接装上 顶住的
move threshold 是干啥的呢
他表示 移动多少距离 重新生成路径
time to stationary 的意思是
停止多长时间 会重新生成路径
time to stationary是和 Carve Only Stationary 成对使用的
也就是说 如果勾选了 Carve Only Stationary
time to stationary 才会生效
move threshold 就失效了
如果不勾选 Carve Only Stationary
那么只有 move threshold 生效
现在让这个物体 动起来
public Vector3 vst = new Vector3(-2.71000004f, 0.5f, -2.50999999f);
public Vector3 ved = new Vector3(-2.71000004f, 0.5f, -4.23000002f);
public float speed = 1.0f;
void Update()
{
float pingPong = Mathf.PingPong(Time.time * speed, 1.0f);
transform.position = Vector3.Lerp(vst, ved, pingPong);
}
在Unity中,Nav Mesh Obstacle组件的carve属性用于控制障碍物是否会改变导航网格的形状。如果启用了carve属性,则当Nav Mesh Obstacle与导航网格重叠时,它会“雕刻”出一个空间,使导航网格围绕该障碍物进行重新生成。
默认情况下,Nav Mesh Obstacle不会雕刻导航网格,而是简单地将其视为障碍物并阻挡导航代理的路径。但是,如果您需要更精细的控制,可以使用carve属性来确保导航代理在遇到障碍物时能够正确地行动。
例如,如果您有一个长方体障碍物,并且想让导航代理能够穿过该障碍物中心,而不是绕过它,那么您可以启用carve属性。这将确保导航网格为该障碍物“雕刻”出一个空间,在导航代理到达障碍物时穿过该空间,而不是绕过它。
请注意,启用carve属性可能会增加导航网格的计算成本,因为它需要重新生成导航网格以适应障碍物的形状。因此,您应该在必要时才使用carve属性,以避免对性能产生不必要的影响。