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 updatevoid Start(){}// Update is called once per framevoid 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属性,以避免对性能产生不必要的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Keil调试STM32卡死在文件startup_stm32f10x_hd.s的B处

———————Keil调试卡死——————— 🎄问题说明 在移植代码完成后调试时候程序卡死在startup_stm32f10x_hd.s文件的B处 🎄复现场景 🎄解决办法 经过查资料,发现是移植的时候,漏掉了终端函数,加上…

MySQL的安装网络配置

目录 一. MySQL5.7的安装 二. MySQL8.0的安装 三. 配置网络访问 思维导图 一. MySQL5.7的安装 1. 解压 2. 将my.ini文件放入到解压文件中 3. 编辑my.ini文件,将路径改为当前路径 4. 进到bin目录下,以管理员身份打开cmd命令窗口 5. 安装MySQL服务 my…

kbdnecat.DLL文件缺失,软件或游戏无法启动运营,快速修复方法

“kbdnecat.DLL文件是什么?为什么一起动游戏或软件,Windows就报错“kbdnecat.DLL文件缺失,软件无法启动””,应该怎么修复呢? 首先,先来了解“kbdnecat.DLL文件”是什么? kbdnecat.DLL是一个动…

LeetCode 45

和跳跃游戏I差不多&#xff5e; class Solution { public:int jump(vector<int>& nums) {const int N1e410;int dp[N]{0};for(int i1;i<nums.size();i){dp[i]0x3f3f3f3f;}//init操作for(int i0;i<nums.size();i){for(int j1;j<nums[i];j){if(ij<nums.siz…

Vue中全局事件总线的配置和原理

实现任意组件之间的通信 任意组件通信的原理&#xff1a; 1、实现任意组件之间的通信,需要一个傀儡。这个傀儡既能被vm访问到,也能被VueComponent访问。 2、VueComponent.prototype.proto Vue.prototype为图上1.0黄色的线路。是Vue让组件实例对象VueComponent可以访问到Vue原…

Invalid options in vue.config.js: “plugins“ is not allowed

项目场景&#xff1a; 安装并配置elementPlus报错。 问题描述 "plugins" is not allowed. plugins不被允许。参考官网修改配置文件vue.config.js。 解决方案&#xff1a; const AutoImport require(unplugin-auto-import/webpack) const Components require(un…

阿里云Alibaba Cloud Linux 3镜像版本清单2024更新

Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版&#xff0c;Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式&#xff0c;目前已经推出Alibaba Cloud Linux 3&#xff0c;阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明&#xff…

即时通讯技术文集(第30期):IM开发综合技术合集(Part3) [共16篇]

为了更好地分类阅读 52im.net 总计1000多篇精编文章&#xff0c;我将在每周三推送新的一期技术文集&#xff0c;本次是第30 期。 ​[- 1 -] 全面掌握移动端主流图片格式的特点、性能、调优等 [链接] http://www.52im.net/thread-1802-1-1.html [摘要] 本文我们一起全面分析学…

HCIA-Datacom题库(自己整理分类的)——其他网络协议【完】

&#xff08;一&#xff09;单选 下列属于链路状态协议的是? Direct static FTP OSPF 解析&#xff1a; FTP&#xff1a;文件传输协议 OSPF&#xff1a;链路状态路由协议 如下图所示的网络主机A通过Telnet登录到路由器A然后在远程的界面通过FTP获取路由器的配置文件&…

学习调整echarts中toolbox位置toolBox工具栏属性

学习调整echarts中toolbox位置toolBox工具栏属性 toolbox工具栏属性介绍示例代码代码参数说明 toolbox工具栏属性介绍 参考网址&#xff1a;https://echarts.apache.org/zh/option.html#tooltip 属性类型说明toolbox.showbooleanboolean 默认值为true&#xff0c;是否显示工具…

studio3T mongodb 根据查询条件去更新集合

mongodb 等于、不等于$ne、不包含 $nin 以及批量更新数据的使用。 业务场景&#xff1a; 在集合中&#xff0c;根据查询条件&#xff0c;更新数据状态。 实现代码&#xff1a; 1. 部门名称为XXX、状态不等于“完好”的、并且不包含这些编码的数据先查询出来2. 再把状态更新成…

多边形压缩 Douglas-Peucker算法

多边形压缩Douglas-Peucker算法&#xff0c;上代码&#xff01; #include <iostream> #include <cmath> #include <utility> #include <vector> #include <stdexcept> #include <opencv2/opencv.hpp> // 包含OpenCV头文件using namespace…

c++语句详细介绍

文章目录 前言简单语句语句作用域1. 局部作用域2. 全局作用域3. 命名空间作用域4. 块作用域 条件语句1. If语句2. Else语句3. Else If语句4. Switch语句5. 嵌套条件语句6. 条件运算符 循环语句1. While循环2. Do-While循环3. For循环4. 范围Based For循环&#xff08;C11及以上…

Linux内核--进程管理(七)进程的核心—task_truct

目录 一、引言 二、调度机制介绍 ------>2.1、任务ID ------>2.2、亲缘关系 ------>2.3、任务状态 ------>2.4、任务权限 ------------>2.4.1、capabilities ------>2.5、运行统计 ------------>2.5.1、pidstat ------>2.6、进程调度 -----…

This is probably not a problem with npm.

项目场景&#xff1a; 新创建的vue3项目&#xff0c;根据elementplus官网安装步骤进行按需导入安装&#xff0c;运行项目报错 This is probably not a problem with npm.There is likely additional logging output above. 原因分析&#xff1a; 是elementplus安装版本和自动…

Python随机点名

python随机点名 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0,9)) 执行以上代码输出结果为: 4 尝试一下 以上实例我们使用了 random 模块的 randint() 函数来生成随机数&#xff0c;你每次执行后都返回不同的数字&a…

什么是Vue.js的响应式系统(reactivity system)?如何实现数据的双向绑定?

Vue.js的响应式系统是指一种能够跟踪数据变化并实时更新相关界面的机制。它是Vue.js框架的核心特性之一。 在Vue.js中&#xff0c;你可以使用数据绑定语法将数据绑定到DOM元素上。当绑定的数据发生变化时&#xff0c;Vue.js会自动监听这些变化并更新相关的DOM元素。 Vue.js实…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 编译构建及此过程中的踩坑填坑(1)

接前一篇文章&#xff1a;玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 代码下载&#xff08;2&#xff09; 本文主要参考&#xff1a; BQ3588C_代码下载 上一回完成了代码下载&#xff0c;本回开始进行编译构建。 1. 编译构建 &#xff08;1&#xff09;执行prebuilts 在源…

lc338 比特位计数

lc338 比特位计数 问题&#xff1a; 给一个整数n&#xff0c;遍历0-n的每一个值&#xff0c;统计每个值二进制中1的个数&#xff0c;返回长度为n1的数组。 题解&#xff1a; Brian Kernighan’s 算法。这个算法的核心思想是每次去掉二进制中最右边的一个1&#xff0c;直到所有…

JavaScript可选链接

注&#xff1a;本节仍然使用之前的饭店的对象&#xff0c;可以看上几篇文章查看代码 ● 如果我们想要看看饭店周一的开门时间&#xff0c;我们会这么写 console.log(restaurant.openingHours.mon.open);原因是我们在开放时间中并没有定义周一的开放时间&#xff0c;所有会报错…