当前位置: 首页 > news >正文

Unity 大地图功能 离线瓦片地图

不使用第二个摄像机实现类似开放世界的大地图功能。

功能如下:

  • 按下M键打开/关闭大地图功能
  • 打开大地图时,默认玩家位置居中
  • 大地图支持拖拽,可调节拖拽速度,支持XY轴翻转
  • 支持大地图设置边缘偏移量
  • 可设置是否启动拖拽边界
  • 可调节缩放系数

 UGUI结构:

Canvas

        ---Root  (大地图范围)

                ---MapTiles (瓦片贴图,可以像离线瓦片地图那样分层展示,尺寸:全局铺满)

                ---playerArrow  (玩家指示器,我用了个箭头表示,设置大小,居中即可)

1.利用UI辅助地编标记范围

 如果比例正确,大小不同可以微调缩放系数。

2.自动回正,在拖拽地图后,再次进入会自动回正,让玩家的位置处于屏幕中央

3.设置偏移,可以设计地图边缘样式等

稍加修改可以改成小地图,代码里就不展示了。原理相同

 代码如下:

using UnityEngine;
using Color = UnityEngine.Color;public class MapController : MonoBehaviour
{[Header("场景对象")]public Transform player; // 玩家对象public Transform plane;  // 场景中的比例尺平面[Header("地图UI对象")]public RectTransform mapRoot; // 地图UI的根节点public RectTransform arrowP1;    // 地图上的箭头[Header("缩放设置")][Tooltip("用于调整Plane大小的缩放系数")]public float scaleFactor = 10f;[Header("快捷键")]public KeyCode toggleMapKey = KeyCode.M; // 切换地图的快捷键private MapDragHandler mapDragHandler;  // 用来访问拖拽处理器void Start(){AdjustPlaneScale();mapDragHandler = mapRoot.GetComponent<MapDragHandler>();  // 获取拖拽处理器组件}void Update(){UpdateArrow();ToggleMap();}/// <summary>/// 根据缩放系数调整Plane的Scale,使其覆盖场景范围并匹配MapRoot的比例/// </summary>private void AdjustPlaneScale(){float mapWidth = mapRoot.sizeDelta.x;float mapHeight = mapRoot.sizeDelta.y;float aspectRatio = mapWidth / mapHeight;plane.localScale = new Vector3(scaleFactor * aspectRatio, 1, scaleFactor);}/// <summary>/// 更新地图上箭头的位置和旋转,以反映玩家的当前位置和朝向/// </summary>private void UpdateArrow(){Vector3 playerPos = player.position;float planeWidth = plane.localScale.x * 10f;float planeHeight = plane.localScale.z * 10f;float mapWidth = mapRoot.sizeDelta.x;float mapHeight = mapRoot.sizeDelta.y;float normalizedX = playerPos.x / planeWidth;float normalizedY = playerPos.z / planeHeight;float mapX = normalizedX * mapWidth;float mapY = normalizedY * mapHeight;arrowP1.anchoredPosition = new Vector2(mapX, mapY);float rotationZ = -player.eulerAngles.y;arrowP1.rotation = Quaternion.Euler(0, 0, rotationZ);}private void ToggleMap(){if (Input.GetKeyDown(toggleMapKey) && mapRoot.transform.parent != null){GameObject mapParent = mapRoot.transform.parent.gameObject;bool isActive = !mapParent.activeSelf;mapParent.SetActive(isActive);if (isActive)CenterPlayerOnMap(player);}}/// <summary>/// 调整地图偏移量以尽量将玩家置于屏幕中心/// </summary>private void CenterPlayerOnMap(Transform player){// 获取玩家在场景中的位置Vector3 playerPos = player.position;// 计算 Plane 的实际宽度(单位:场景单位)float planeWidth = plane.localScale.x * 10f;float planeHeight = plane.localScale.z * 10f;// 获取 MapRoot 的实际尺寸(单位:像素)float mapWidth = mapRoot.sizeDelta.x;float mapHeight = mapRoot.sizeDelta.y;// 将场景坐标归一化到 [-0.5, 0.5] 的比例范围内float normalizedX = playerPos.x / planeWidth;float normalizedY = playerPos.z / planeHeight;// 将归一化坐标转换为 MapRoot 的像素坐标float mapX = normalizedX * mapWidth;float mapY = normalizedY * mapHeight;// 计算偏移量,让玩家位置对齐到屏幕中心float centerX = 0f; // 中心点的 X 坐标float centerY = 0f; // 中心点的 Y 坐标float offsetX = centerX - mapX;float offsetY = centerY - mapY;if (mapDragHandler.useBoundary){offsetX = Mathf.Clamp(offsetX, mapDragHandler.minBoundary.x, mapDragHandler.maxBoundary.x);offsetY = Mathf.Clamp(offsetY, mapDragHandler.minBoundary.y, mapDragHandler.maxBoundary.y);}// 应用偏移量到地图根节点mapRoot.anchoredPosition = new Vector2(offsetX, offsetY);}#if UNITY_EDITORprivate void OnValidate(){if (plane != null){AdjustPlaneScale();}}Vector3 center; // 平面的中心点Vector2 size;   // 平面的宽度和高度float heightSize = 2.0f; // 高void OnDrawGizmos(){if (plane != null){center = plane.position;size = new Vector2(plane.localScale.x * 10, plane.localScale.z * 10);}// Gizmos是绘制调试辅助图形的简单方法Gizmos.color = Color.blue;Vector3 halfSize = new Vector3(size.x / 2, 0, size.y / 2);Vector3 p1 = center + new Vector3(-halfSize.x, 0, -halfSize.z);Vector3 p2 = center + new Vector3(halfSize.x, 0, -halfSize.z);Vector3 p3 = center + new Vector3(halfSize.x, 0, halfSize.z);Vector3 p4 = center + new Vector3(-halfSize.x, 0, halfSize.z);Vector3 p5 = center + new Vector3(-halfSize.x, heightSize, -halfSize.z);Vector3 p6 = center + new Vector3(halfSize.x, heightSize, -halfSize.z);Vector3 p7 = center + new Vector3(halfSize.x, heightSize, halfSize.z);Vector3 p8 = center + new Vector3(-halfSize.x, heightSize, halfSize.z);Gizmos.DrawLine(p1, p2);Gizmos.DrawLine(p2, p3);Gizmos.DrawLine(p3, p4);Gizmos.DrawLine(p4, p1);Gizmos.DrawLine(p5, p6);Gizmos.DrawLine(p6, p7);Gizmos.DrawLine(p7, p8);Gizmos.DrawLine(p8, p5);Gizmos.DrawLine(p1, p5);Gizmos.DrawLine(p2, p6);Gizmos.DrawLine(p3, p7);Gizmos.DrawLine(p4, p8);}
#endif
}
using UnityEngine;
using UnityEngine.EventSystems;public class MapDragHandler : MonoBehaviour, IPointerDownHandler, IDragHandler
{[Header("方向取反设置")]public bool invertX = false; // X方向取反public bool invertY = false; // Y方向取反[Header("拖拽速度")]public float dragSpeed = 1f; // 拖拽速度[Header("拖拽边界")]public bool useBoundary = false; // 是否使用边界限制public Vector2 offsetBoundary;// 拖拽的边界偏移量public Vector2 minBoundary; // 拖拽的最小边界(左下角)public Vector2 maxBoundary; // 拖拽的最大边界(右上角)private RectTransform mapRoot; // MapRoot 的 RectTransformprivate Vector2 previousPointerPosition; // 记录上一次指针位置private void Awake(){// 获取 RectTransform 组件mapRoot = GetComponent<RectTransform>();if (mapRoot == null){Debug.LogError("MapDragHandler 需要绑定一个具有 RectTransform 的对象!");}useBoundary = mapRoot.rect.width > Screen.width && mapRoot.rect.height > Screen.height;// 设置默认的边界值,根据你的实际需求调整这些值minBoundary = new Vector2(-(mapRoot.rect.width / 2) + (Screen.width / 2) - offsetBoundary.x, -(mapRoot.rect.height / 2) + (Screen.height / 2) - offsetBoundary.y);maxBoundary = new Vector2((mapRoot.rect.width / 2) - (Screen.width / 2) + offsetBoundary.x, (mapRoot.rect.height / 2) - (Screen.height / 2) + offsetBoundary.y);}// 当指针按下时记录初始位置public void OnPointerDown(PointerEventData eventData){RectTransformUtility.ScreenPointToLocalPointInRectangle(mapRoot.parent as RectTransform,eventData.position,eventData.pressEventCamera,out previousPointerPosition);}// 拖拽时计算位移public void OnDrag(PointerEventData eventData){Vector2 currentPointerPosition;RectTransformUtility.ScreenPointToLocalPointInRectangle(mapRoot.parent as RectTransform,eventData.position,eventData.pressEventCamera,out currentPointerPosition);// 计算拖拽的偏移量Vector2 delta = currentPointerPosition - previousPointerPosition;// 应用方向取反设置if (invertX) delta.x = -delta.x;if (invertY) delta.y = -delta.y;// 更新 MapRoot 的位置Vector2 newPosition = mapRoot.anchoredPosition + delta * dragSpeed;// 限制位置到指定边界范围内if (useBoundary){newPosition.x = Mathf.Clamp(newPosition.x, minBoundary.x, maxBoundary.x);newPosition.y = Mathf.Clamp(newPosition.y, minBoundary.y, maxBoundary.y);}// 设置新的位置mapRoot.anchoredPosition = newPosition;// 更新记录的指针位置previousPointerPosition = currentPointerPosition;}
}

相关文章:

Unity 大地图功能 离线瓦片地图

不使用第二个摄像机实现类似开放世界的大地图功能。 功能如下&#xff1a; 按下M键打开/关闭大地图功能 打开大地图时&#xff0c;默认玩家位置居中 大地图支持拖拽&#xff0c;可调节拖拽速度&#xff0c;支持XY轴翻转 支持大地图设置边缘偏移量 可设置是否启动拖拽边界 …...

【计算机网络】什么是网关(Gateway)?

网上冲浪多了&#xff0c;你可以听到过网关&#xff08;Gateway&#xff09;这个词&#xff0c;但是却不太清楚网关&#xff08;Gateway&#xff09;到底是干什么的、负责网络当中的什么任务&#xff0c;本篇文字将会为你介绍网关&#xff08;Gateway&#xff09;的作用&#x…...

AIOps 平台

AIOps&#xff08;Artificial Intelligence for IT Operations&#xff09;平台是一种结合人工智能&#xff08;AI&#xff09;技术和IT运营管理的解决方案&#xff0c;旨在通过自动化、智能化的手段优化企业IT系统的运行与管理。以下是AIOps平台的核心功能、优势以及常见的技术…...

使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备

一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB&#xff0c;这里会将创建数据库的代码放到了&#xff0c;将文件复制到data/sql目录中&#xff0c;然后在终端中的项目文件夹中执行&#xff1a; pip install sqlite3现在创建一个名为sqldb的数据库&a…...

TCP与UDP协议

一、主要区别 ① 连接的建立和断开&#xff1a; TCP&#xff08;Transform Control Protocol&#xff09;通过三次握手来建立一个可靠的连接。这个过程确保了双方都能发送和接收数据。连接建立后&#xff0c;TCP提供稳定的数据传输服务。当通信结束时&#xff0c;TCP通过四次…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...

Cisco认证是Cisco公司建立的网络技术证书体系

思科认证体系是由Cisco公司建立的分为3个层次的网络技术证书体系&#xff0c;随着Cisco产品线的扩大和市场份额的不断提升&#xff0c;Cisco产品从当初仅有的 Cisco路由器和Cisco交换机发展到现在的6大方向&#xff1a;路由交换&#xff0c;网络设计&#xff0c;网络安全&#…...

Clojure语言的面向对象编程

Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言&#xff0c;它特别强调函数式编程&#xff0c;Immutable数据结构和强大的并发能力。然而&#xff0c;很多人可能会问&#xff1a;Clojure支持面向对象编程吗&#xff1f;虽然Clojure没有像Java或C那样的传统类和…...

React快速上手到项目实战总篇

React核心价值与前置知识 时刻保持对知识的渴望 家人们 开学!!! 核心价值 组件化&#xff08;易开发易维护&#xff09; 数据驱动视图 &#xff1a;定义好数据和ui的显示规则 即UIf(state) 只关注业务数据修改&#xff0c;不在操作DOM 增加开发效率 使用vite创建Recat项目 …...

Dart语言的语法

Dart语言的魅力与应用 引言 随着互联网的发展和移动设备的普及&#xff0c;编程语言层出不穷&#xff0c;各种语言如雨后春笋般被创造出来。其中&#xff0c;Dart语言作为一种现代编程语言&#xff0c;凭借其简洁的语法、强大的功能以及良好的性能&#xff0c;受到了越来越多…...

C++——多态

目录 前言 1. 多态的概念 2. 多态的定义及其实现 2.1 多态的构成条件 2.1.1 实现多态的两个重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 多态场景的⼀个选择题 2.1.5 虚函数重写的⼀些其他问题 2.1.5.1 协变&#xff08;了解&#xff09; 2.1.5.2 析构函…...

什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行

什么是Transformer模型中的KV缓存? 在Transformer模型中,KV缓存(Key-Value Cache)具有重要作用,以下是关于它的详细介绍: 概念含义 KV缓存主要是用于存储在模型推理过程中已经计算过的键(Key)和值(Value)信息。在Transformer架构里,比如在自注意力机制等计算环节…...

12.C语言中的struct详解:定义、赋值、指针、嵌套与位字段

目录 1.简介2.struct 的复制3.struct 指针4.struct 的嵌套5.位字段6.弹性数组成员 1.简介 本篇原文为&#xff1a;C语言中的struct详解&#xff1a;定义、赋值、指针、嵌套与位字段。 更多C进阶、rust、python、逆向等等教程&#xff0c;可点击此链接查看&#xff1a;酷程网 …...

洛谷 P3000 [USACO10DEC] Cow Calisthenics G

思路 题目要求断若干条边后形成的连通块中&#xff0c;最大的直径最小&#xff0c;很明显的二分。关键就在于如何写 c h e c k check check 函数了。 可以用 d f s dfs dfs 来判断要断哪条边。 一、 d [ u ] d[u] d[u] 定义 设 d [ u ] d[u] d[u] 为从 u u u 出发到子树…...

前端拿到zip中所有文件并下载为新的zip文件

问题原因&#xff1a;后端返回了一个zip格式文件供前端下载&#xff0c;然后下载后&#xff0c;形成了zip套zip的形式&#xff0c;当后端不愿处理时&#xff0c;前端不能坐以待毙 PS&#xff1a;当压缩包文件量过大&#xff0c;前端可能会出问题&#xff08;脑测&#xff0c;未…...

JVM调优

jvm调优步骤&#xff1a;1发现问题、2。定位问题、3.解决问题 jdk自带的命令行调优工具&#xff1a; 1. jps 查看正在运行的 Java 进程 jps -v 查看进程启动时的JVM参数 options 参数&#xff1a; -q&#xff1a;仅仅显示 LVMID&#xff08;local virtual machine id&#x…...

【前端】【HTML】入门基础知识

参考视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>&#xff1a;一级标题&#xff0c;通常用于页面的主标题&#xff0c;字体较大且醒目。 <h2>&#xff1a;二级标题&#xff0c;用于副标题或主要章节标…...

Ubuntu桌面管理环境: GDM3,KDM,LightDM

介绍 Ubuntu是一个广受欢迎的Linux操作系统&#xff0c;拥有强大而多样化的桌面管理环境。其中三个常用的桌面管理环境是GDM3&#xff0c;KDM和LightDM。本篇博客将介绍这三个桌面管理环境的特点和功能。 GDM3 (GNOME Display Manager) GDM3是默认的桌面管理环境&#xff0c…...

每天你好20250110(距离春节19天!!!)

亲爱的朋友们&#xff0c;大家早上好&#xff01; &#x1f31e; 今晨乃 2025 年 1 月 10 日&#xff0c;星期五&#xff0c;农历乙巳[蛇]年十一月二十一日。祥蛇逸彩送祥&#xff0c;金乌喷薄耀世&#xff0c;晨晖破雾而来&#xff0c;恰似“赤日初升&#xff0c;其道大光”&…...

iOS 本地新项目上传git仓库,并使用sourceTree管理

此文记录的场景描述&#xff1a; iOS前期开发时&#xff0c;在本地创建项目&#xff0c;直至开发一段时间&#xff0c;初期编码及框架已完善后&#xff0c;才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库&#xff0c;可以使用终端&#xff0c;键入命令…...

计算机网络之---计算机网络的性能评估

计算机网络的性能评估是指通过各种标准和指标来衡量网络的工作效率和质量&#xff0c;进而对网络进行优化和改进的过程。评估的目标是确保网络能够满足预期的服务质量&#xff08;QoS&#xff09;和性能需求。常见的计算机网络性能评估指标包括带宽、延迟、吞吐量、丢包率等。 …...

对话|企业如何构建更完善的容器供应链安全防护体系

对话&#xff5c;企业如何构建更完善的容器供应链安全防护体系 云布道师 随着云计算和 DevOps 的兴起&#xff0c;容器技术和自动化成为软件开发中的必要手段&#xff0c;软件供应链也进入了自动化及 CI/CD 阶段。然而&#xff0c;容器技术和自动化虽然提升了软件的更新速度&…...

【SpringSecurity】二、自定义页面前后端分离

文章目录 1、用户认证流程AuthenticationSuccessHandler AuthenticationFailureHandlerSecurityFilterChain配置用户认证信息 2、会话并发处理2.1、实现处理器接口2.2、SecurityFilterChain配置 1、用户认证流程 AuthenticationSuccessHandler AuthenticationFailureHandler …...

在 Vue 3 集成 e签宝电子合同签署功能

实现 Vue 3 e签宝电子合同签署功能&#xff0c;需要使用 e签宝提供的实际 SDK 或 API。 e签宝通常提供针对不同平台&#xff08;如 Web、Android、iOS&#xff09;的 SDK&#xff0c;而 Web 端一般通过 WebView 或直接使用嵌入式 iframe 来加载合同签署页面。 下面举个 &…...

基于华为ENSP的OSPF接口网络类型深入浅出(4)

本篇技术博文摘要 &#x1f31f; OSPF的接口在不同网络类型下的工作方式&#xff1b;不同网络类型下的报文通告方式深入浅出hub-spoke架构 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我是肾透侧视攻城狮&#xff0c;一名什么都会一…...

西电-算法分析-研究生课程复习笔记

24年秋的应该是张老师最后一次用卷面考试&#xff0c;他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的&#xff0c;上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念&#xff0c;考试也是考个人对这些的理解&#xff0c;还挺好玩的哈…...

音频数据增强:提升音频信号质量的多种技术

在音频处理和机器学习领域&#xff0c;音频数据增强是一种常用的技术&#xff0c;旨在通过对原始音频信号进行各种变换和处理&#xff0c;生成更多样化的训练数据。这不仅可以提高模型的鲁棒性&#xff0c;还能改善其在真实世界应用中的表现。本文将介绍几种常用的音频数据增强…...

如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程

简介 Caddy 是一个开源的 Web 服务器&#xff0c;它支持静态和现代 Web 应用程序&#xff0c;使用预定义的配置规则&#xff0c;并为所有链接的域名自动启用 HTTPS。Caddy 使用 GO 语言编写&#xff0c;提供了用户友好的配置指令&#xff0c;使你既可以将其用作 Web 服务器&am…...

python_excel列表单元格字符合并、填充、复制操作

读取指定sheet页&#xff0c;根据规则合并指定列&#xff0c;填充特定字符&#xff0c;删除多余的列&#xff0c;每行复制四次&#xff0c;最后写入新的文件中。 import pandas as pd""" 读取指定sheet页&#xff0c;根据规则合并指定列&#xff0c;填充特定字…...

基于GAN和RL的思想来训练对话生成

Paper https://arxiv.org/pdf/1701.06547.pdf 基于GAN和RL的思想来训练对话生成 Implementation https://github.com/jiweil/Neural-Dialogue-Generation/tree/master/Adversarial...

小米路由器IPv6 功能使用指南

本文不限于多层路由使用IPv6 的情况&#xff0c;提供解决IPv6 无法获取的更硬核的方法&#xff0c;需要有ssh 工具。&#xff08;无安卓设备&#xff0c;测试环境win、mac、ios&#xff09; 首先明确一点&#xff0c;就是如果想让你的设备得到GUA 地址&#xff0c;即访问 6.i…...

运放输入偏置电流详解

1 输入阻抗与输入偏置电路关系 在选择运放和仪表运放时&#xff0c;经常听到这样的说法&#xff1a;“需要非常高的输入阻抗”&#xff0c;事实上真实如此吗&#xff1f; 输入阻抗&#xff08;更确切的说是输入电阻&#xff09;很少会成为一个重要的问题&#xff08;输入电容也…...

C++指针类型的基本理论和使用方式-学习记录

一、指针简概 &#xff08;一&#xff09;指针定义 指针&#xff08;pointer&#xff09;是“指向&#xff08;point to&#xff09;”另外一种类型的复合类型。与引用类似&#xff0c;指针也实现了对其他对象的间接访问。然而指针与引用相比又有很多不同点。其一&#xff0c;…...

Elasticsearch:使用 Playground 与你的 PDF 聊天

LLMs作者&#xff1a;来自 Elastic Toms Mura 了解如何将 PDF 文件上传到 Kibana 并使用 Elastic Playground 与它们交互。本博客展示了在 Playground 中与 PDF 聊天的实用示例。 Elasticsearch 8.16 具有一项新功能&#xff0c;可让你将 PDF 文件直接上传到 Kibana 并使用 Pla…...

计算机网络之---物理层设备

什么是物理层设备 物理层设备是指负责数据在物理媒介上传输的硬件设备&#xff0c;它们主要处理数据的转换、信号的传输与接收&#xff0c;而不涉及数据的内容或意义。常见的物理层设备包括网卡、集线器、光纤收发器、调制解调器等。 物理层设备有哪些 1、网卡&#xff08;N…...

【Duilib】 List控件支持多选和获取选择的多条数据

问题 使用Duilib库写的一个UI页面用到了List控件&#xff0c;功能变动想支持选择多行数据。 分析 1、List控件本身支持使用SetMultiSelect接口设置是否多选&#xff1a; void SetMultiSelect(bool bMultiSel);2、List控件本身支持使用GetNextSelItem接口获取选中的下一个索引…...

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果

效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …...

如何在 Ubuntu 22.04 上集成 Collabora Online 教程

简介 在本教程中&#xff0c;我们将详细讲解如何在 Ubuntu 22.04 操作系统上安装 Collabora Online。 Collabora Online 是一个基于 LibreOffice 技术的开源办公套件。它提供了许多功能&#xff0c;其中最有用的一个功能是 Collabora 提供了 Word 文档、电子表格、演示文稿等…...

Linux系统启动jar包--Java8

启动命令及参数 1. 启动命令模板 nohup java \ -Xms512m \ -Xmx1024m \ -Xmn256m \ -XX:MetaspaceSize128m \ -XX:MaxMetaspaceSize256m \ -XX:UseG1GC \ -XX:InitiatingHeapOccupancyPercent45 \ -XX:PrintGCDetails \ -XX:PrintGCDateStamps \ -XX:PrintGCApplicationStopp…...

linux-定制化rpm(rpmbuild)

一. 引文&#xff1a; 为实现我们的快速安装&#xff0c;特定服务需求的服务部署需求&#xff0c; 我们选择了通过source编译后定制成rpm&#xff0c;存放至自定义yum仓库&#xff0c;通过yum工具规范化管理及部署服务。目前比较常用的rpm打包方式分别为rpmbuild和fpm(在rpmbui…...

面向对象分析与设计Python版 分析与设计概述

文章目录 一、软件工程概述二、分析与设计概述 一、软件工程概述 高质量软件系统的基本要求 架构性内聚可重用性可维护性可扩展性灵活性 软件开发过程模型&#xff1a;是指根据软件开发项目从开始到结束的一系列步骤和方法&#xff0c;建模为不同的模型。常见的有&#xff1…...

npm发布流程说明

一、进入要发布的项目根目录&#xff0c;初始化为npm包 npm initname&#xff1a;最重要的字段之一&#xff0c;项目名称&#xff08;少于214个字节&#xff09;。没有name和version不能进行安装&#xff1b; version&#xff1a;最重要的字段之一&#xff0c;项目版本。没有n…...

Nginx反向代理请求头有下划线_导致丢失问题处理

后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到&#xff0c;搜索之后发现nginx默认request的header中包含’_’时&#xff0c;会自动忽略掉。 解决方法是&#xff1a;在nginx里的nginx.conf配置文件中的http部分中添加如下配置&#xff1a; unders…...

计网C1C2C3答案自用

Chapter 1 Computer Network and the Internet Review Questions Solution R1. What is the difference between a host and end system? List several different types of end system. Is a Web server an end system? There is no difference between a host and an end …...

为什么要分为大端和小端

1.大端序 0x12345678 地址&#xff1a; 0x00 0x01 0x02 0x03 数据&#xff1a; 0x12 0x34 0x56 0x78 高位字节存储在低地址&#xff0c;常用语网络协议&#xff0c;便于人阅读、书写类似。 2.小端序 0x12345678 地址&#xff1a; 0x00 0x01 0x02 0x03 …...

通过可穿戴外骨骼,以更灵活的方式操作你的机器人。

今天&#xff0c;我们将介绍一款专为控制 Mercury X1 和 Mercury B1 机械臂而设计的创新外骨骼。这种外骨骼以人类手臂的结构为蓝本&#xff0c;可实现直观和精确的控制。 开发这种外骨骼的动机源于人们对深度学习和机器学习等领域日益增长的兴趣。这些技术使机器人能够自主学习…...

【大数据基础】大数据概述

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识&#xff0c;分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数…...

使用双向链表优化数组操作的性能

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 背景 双向链表的优势 实现方案 性能优化 …...

Lua语言的语法

Lua语言的探索与应用 引言 Lua是一种轻量级、高性能的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统和很多应用程序中。它的灵活性和高效性使得Lua成为软件开发中不可或缺的一部分。本文将从Lua的历史、语法、特色、使用案例及其在实际开发中的应用进行深入探讨。 Lu…...

Linux随记(十四)

一、处理vsftpd漏洞 【vsftpd安全漏洞(CVE-2021-30047)】 #操作系统1&#xff1a;bclinux euler 21.10#操作系统2&#xff1a;kylin v10二、处理ntp漏洞 【NTPMode6检测漏洞【原理扫描】】 #操作系统1&#xff1a;bclinux euler 21.10 cp /etc/ntp.conf /etc/ntp.conf.bak202…...