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

Unity Dots从入门到精通 Mono和Dots通讯

文章目录

    • 前言
    • 安装 DOTS 包
    • Mono To Dots
    • Dots To Mono

前言

DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世界游戏。
本文讲解我们的Mono代码部分,如何与Dots的System部分进行通讯。比如:交换数据,发送事件等。

  • Unity 2022.3.52f1
  • Entities 1.3.10

安装 DOTS 包

要安装 DOTS 包,请按照以下步骤操作:

(1)从菜单“窗口 → 包管理器”打开包管理器。
(2)搜索“ Entities” 并安装 Entities和Entities Graphics。
(3)搜索“ Universal RP” 并安装 Universal RP,并设置Graphics/Scriptable Render Pipeline Settings。

这会添加“实体”作为依赖项,并递归添加它所依赖的关联包( Burst、Collections、Jobs、Mathematics等)。

在这里插入图片描述

Mono To Dots

如何从Mono发送控制指令,比如创建士兵的命令到Dots中,让Dots创建指定的实体呢?
我们需要使用到DynamicBuffer,一个Dots中的消息Buffer队列,我们在Mono中可以通过World.EntityManager,获取这个共享的消息队列,并往里面添加消息数据,Dots只需要在System下接受数据并解析即可。

public class GameManager : MonoBehaviour
{public static GameManager Instance { get; private set; }private EntityManager _entityManager;private Entity _commandEntity;private void Start(){Instance = this;_entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;//创建一个专门用于存储游戏命令的"信箱实体",相当于在 ECS 世界中创建了一个命令接收站_commandEntity = _entityManager.CreateEntity();// 为该实体附加一个可动态增长的缓冲区,用于存储多个 GameCommand 命令_entityManager.AddBuffer<GameCommand>(_commandEntity);}private void Update(){if (Input.GetKeyDown(KeyCode.Alpha1))AddSpawnCommand(Faction.Red, SolderType.Melee);}void AddSpawnCommand(Faction faction, SolderType solder, int num = 1){DynamicBuffer<GameCommand> buffer = _entityManager.GetBuffer<GameCommand>(_commandEntity);// 解析网络数据为命令(示例)var command = new GameCommand{CMD = CommandType.SpawnUnit,Faction = faction,Solder = solder,Number = num};buffer.Add(command);}
//UnitSpanerSystem系统类
public partial struct UnitSpawnerSystem : ISystem
{[BurstCompile]public void OnCreate(ref SystemState state){state.RequireForUpdate<EndSimulationEntityCommandBufferSystem.Singleton>();state.RequireForUpdate<EntitiesReferences>();}[BurstCompile]public void OnUpdate(ref SystemState state){var ecbSingleton = SystemAPI.GetSingleton<EndSimulationEntityCommandBufferSystem.Singleton>();var ecb = ecbSingleton.CreateCommandBuffer(state.WorldUnmanaged).AsParallelWriter();var entitiesReferences = SystemAPI.GetSingleton<EntitiesReferences>();var job = new UnitSpawnerJob{EntitiesReferences = entitiesReferences,ECB = ecb};var jobHandle = job.ScheduleParallel(state.Dependency);jobHandle.Complete();}
}//UnitSpawnerJob类,用来实现多线程执行任务
[BurstCompile]
public partial struct UnitSpawnerJob : IJobEntity
{public EntityCommandBuffer.ParallelWriter ECB;public EntitiesReferences EntitiesReferences;public void Execute([EntityIndexInQuery] int index, ref DynamicBuffer<GameCommand> buffer){//buffer中会接收到来自Mono端的消息foreach (GameCommand cmd in buffer){ProcessCommand(index, cmd);}buffer.Clear();}//解析命令private void ProcessCommand(int index, GameCommand cmd){switch (cmd.CMD){case CommandType.SpawnUnit:var prefabEntity = GetPrefab(cmd);float3 startPosition = GetBornPos(cmd);float3 targetPosition = GetTargetPos(cmd);Entity zombieEntity = ECB.Instantiate(index, prefabEntity);ECB.SetComponent(index, zombieEntity, LocalTransform.FromPosition(startPosition));ECB.SetComponent(index, zombieEntity, new UnitMover{moveSpeed = 2,rotationSpeed = 2,targetPosition = targetPosition});break;case CommandType.DestroyUnit:break;case CommandType.ChangeTeam:break;default:throw new ArgumentOutOfRangeException();}}
}

Dots To Mono

从Dots把消息发送给Mono层,比如我们的Dots系统中,有士兵死亡,或者游戏的成功/失败,我们需要通知Mono层的主UI更新界面显示等。我们需要用到从Dots往Mono层发送事件。

新建一个数据结构,用来从Dots往Mono发送的消息结构体

public struct RcvData
{public Faction faction;public int type;public float value;public RcvData(Faction faction,int type,float value){this.faction = faction;this.type = type;this.value = value;}
}

新建一个全局的共性数据队列静态类Facade
它主要维护了一个NativeQueue 的共享队列

public static class Facade
{public static NativeQueue<RcvData> SharedQueue { get; } = new(Allocator.Persistent);public static void Cleanup(){if (SharedQueue.IsCreated){SharedQueue.Dispose();}}
}

比如我们的阵营有一个血量,血量 变化会通知Mono端的UGUI更新界面

public partial struct HealthSystem : ISystem
{private NativeQueue<RcvData>.ParallelWriter _writer;private EntityCommandBuffer.ParallelWriter _ecb;[BurstCompile]public void OnCreate(ref SystemState state){state.RequireForUpdate<EndSimulationEntityCommandBufferSystem.Singleton>();_writer = Facade.SharedQueue.AsParallelWriter();}[BurstCompile]public void OnUpdate(ref SystemState state){_ecb = SystemAPI.GetSingleton<EndSimulationEntityCommandBufferSystem.Singleton>().CreateCommandBuffer(state.WorldUnmanaged).AsParallelWriter();var job = new HealthJob{Writer = _writer,ECB = _ecb,};var jobHandle = job.ScheduleParallel(state.Dependency);jobHandle.Complete(); // 确保Job执行完成}
}[BurstCompile]
public partial struct HealthJob : IJobEntity
{public NativeQueue<RcvData>.ParallelWriter Writer;public EntityCommandBuffer.ParallelWriter ECB;public void Execute([EntityIndexInQuery] int index,ref Health health){float healthNormalized = health.healthAmount / (float)health.healthAmountMax;//发送数据到UI层Writer.Enqueue(new RcvData(health.faction, 1, healthNormalized));}
}

Mono端,我们如何接受这个数据呢?

	//Update 检测Dots事件private void Update(){QueryDotsEvent();}void QueryDotsEvent(){while (Facade.SharedQueue.TryDequeue(out RcvData value)){// 主线程安全读取switch (value.type){case 1:UIManager.Instance.SetHP(value.faction, value.value);break;case 2:Money += (int)value.value;UIManager.Instance.SetMoney(value.faction, Money);break;}}}//销毁时,注意释放共享队列private void OnDestroy(){Facade.Cleanup();}

好了,这样我们就实现了Mono和Dots的双向数据通讯
应该还有别的更好的方法,欢迎大家的留言交流

相关文章:

Unity Dots从入门到精通 Mono和Dots通讯

文章目录 前言安装 DOTS 包Mono To DotsDots To Mono 前言 DOTS&#xff08;面向数据的技术堆栈&#xff09;是一套由 Unity 提供支持的技术&#xff0c;用于提供高性能游戏开发解决方案&#xff0c;特别适合需要处理大量数据的游戏&#xff0c;例如大型开放世界游戏。 本文讲…...

WLAN(无线局域网)安全

WLAN安全涉及到保护无线局域网免受各种威胁和攻击&#xff0c;以确保数据的保密性、完整性和可用性。以下是关于WLAN安全的多方面介绍&#xff1a; 一、主要安全威胁 窃听&#xff1a;攻击者利用特殊设备监听无线信号&#xff0c;获取传输中的数据&#xff0c;如用户的账号密…...

故障诊断——neo4j入门

文章目录 neo4jQuickStartDemo neo4j QuickStart 详情可见博客&#xff1a;https://www.cnblogs.com/nhdlb/p/18703804&#xff0c;使用docker拉取最近的一个版本进行创建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…...

【商城实战(25)】解锁UniApp移动端适配秘籍,打造完美商城体验

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

Qt 数据库操作(Sqlite)

数据库简介 关于数据库的基础知识这里就不做介绍了&#xff0c;相关博客可以查看&#xff1a; SQL基础知识 数据库学霸笔记 上面博客都写的比较详细&#xff0c;本文主要介绍如何使用Qt进行数据库相关操作&#xff0c;数据库分为关系型数据库和非关系型数据&#xff0c;关系…...

LINUX 指令大全

Linux服务器上有许多常用的命令&#xff0c;可以帮助你管理文件、目录、进程、网络和系统配置等。以下是一些常用的Linux命令&#xff1a; 文件和目录管理 ls&#xff1a;列出当前目录中的文件和子目录 bash lspwd&#xff1a;显示当前工作目录的路径 bash pwdcd&#xff1a;切…...

【Synchronized】不同的使用场景和案例

【Synchronized】不同的使用场景和案例 【一】锁的作用范围与锁对象【1】实例方法&#xff08;对象锁&#xff09;【2】静态方法&#xff08;类锁&#xff09;【3】代码块&#xff08;显式指定锁对象&#xff09;【4】类锁&#xff08;通过Class对象显式锁定&#xff09; 【二】…...

华为欧拉操作系统安装Docker服务

华为欧拉 20.03 操作系统安装 Docker 服务 一、安装前准备 系统环境检查 确认当前运行的操作系统为华为欧拉 24.03。可通过在终端执行以下命令查看&#xff1a; cat /etc/os - release欧拉系统可以使用以下命令&#xff1a; cat /etc/openEuler-release确保系统已连接互联…...

告别复杂日志解析 用bin2sql轻松实现MySQL数据闪回

mysqlbinlog⼯具使用 use test; CREATE TABLE t1 (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;INSERT INTO t1(id, name) SELECT 101, tome101; INSERT INTO t1(id, name) SELECT 102, tome1…...

uniapp简单table表

<template><view class"container"><scroll-view scroll-x"true" scroll-y"true" class"table-scroll"><view class"table-header"><view class"table-cell fixed-column">序号<…...

prompt大师高效提示词解析

Prompt大师李继刚高效提示词示例解析 一、「汉语新解」提示词 核心结构 采用Lisp语言框架嵌套中文语义&#xff0c;通过(defun 新汉语老师 ()...)定义角色风格&#xff08;融合奥斯卡王尔德、鲁迅的批判性语言&#xff09;&#xff0c;用(隐喻 (一针见血...))构建解释逻辑链。…...

uni-app如何发布项目为app_2025

参考大佬的&#xff1a;uni-app项目打包成apk&#xff08;本地打包篇&#xff09;_uniapp打包apk-CSDN博客 1、导入前配置 在 HBuilder X 中打开uni-app项目中的 mainifest.json 文件&#xff0c;appid没有的话可以点“重新获取” 2、打包 然后关注控制台&#xff0c;导出成功…...

MySQL与Canal、RabbitMQ集成指南

MySQL 部分 1. 查看是否开启 binlog MySQL 8 默认开启 binlog。可以通过以下命令查看是否开启&#xff1a; SHOW VARIABLES LIKE log_bin;如果返回结果为 ON&#xff0c;则表示 binlog 已开启。 Variable_nameValuelog_binON 2. 若未开启 binlog&#xff0c;则需手动配置 …...

新品发布|启英泰伦联合启明云端推出离在线语音大模型方案

当前&#xff0c;生成式大模型正以颠覆性姿态重塑人机交互的边界&#xff0c;并逐渐向终端场景渗透。然而&#xff0c;云端大模型在落地终端场景时面临两大挑战&#xff1a; 在真实噪声场景下容易听不清、误识别&#xff0c;影响交互准确性&#xff1b;云端处理冗余数据及大规…...

网编高级 day01

网编高级 day01 0. 大纲1. Modbus协议1.1. Modbus起源1.2. 分类1.3. Modbus TCP特点 2. Modbus TCP协议格式2.1. 报文头2.2. 寄存器2.3. 功能码 0. 大纲 协议&#xff1a; modbus协议&#xff1a;modbus TCP、modbus RTUhtml 网页&#xff1a;http协议Webserver 工具&#x…...

2001-2023年上市公司数字化转型年报词频统计(年报词频统计和MDA词频统计两种方式)(吴非、赵宸宇、甄红线300+关键词三种方法)

2001-2023年上市公司数字化转型年报词频统计&#xff08;年报词频统计和MD&A词频统计两种方式&#xff09;&#xff08;吴非、赵宸宇、甄红线300关键词三种方法&#xff09; 1、时间&#xff1a;2001-2023年 2、来源&#xff1a;上市公司年报 3、参考文献&#xff1a; …...

数据分析与AI丨AI Fabric:数据和人工智能架构的未来

AI Fabric 架构是模块化、可扩展且面向未来的&#xff0c;是现代商业环境中企业实现卓越的关键。 在当今商业环境中&#xff0c;数据分析和人工智能领域发展可谓日新月异。几乎每天都有新兴技术诞生&#xff0c;新的应用场景不断涌现&#xff0c;前沿探索持续拓展。可遗憾的是&…...

MQ消息发送不在MySQL事务中,该如何保证一致性?

在 MQ 消息发送与 MySQL 事务分离的场景下&#xff0c;可通过以下方案保障数据一致性&#xff1a; 一、核心原则 确保 业务操作成功 与 消息发送成功 的最终一致性&#xff0c;避免因网络抖动、服务宕机等异常导致以下问题&#xff1a; 场景1&#xff1a;业务操作成功但消息未…...

[rust] rust学习

rust学习 1. 项目组织结构 工程 # 创建一个工程 cargo new my-project工作空间 在 Rust 中&#xff0c;工作空间&#xff08;Workspace&#xff09; 是一个包含多个 Rust 项目的共享环境&#xff0c;用于管理多个 crate&#xff08;库或可执行文件&#xff09;。它允许多个…...

艾尔登复刻Ep1——客户端制作、场景切换、网络控制

需要添加的插件内容 Netcode for GameObjects&#xff1a;是一个为 Unity 游戏开发提供高级网络功能的 SDK。它的主要作用是允许开发者在其 GameObject 和 MonoBehaviour 工作流中集成网络功能&#xff0c;并且可以与多种底层传输层协议兼容。 具体内容请看&#xff1a;https:…...

正则表达式(复习)

文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...

密码学笔记

密码学 一、密码学基础概念 1. CIA三要素 机密性 (Confidentiality)&#xff1a;信息不被未授权者访问。 例子&#xff1a;用钥匙锁住日记本&#xff0c;只有你有钥匙。 完整性 (Integrity)&#xff1a;信息在传输/存储中不被篡改。 例子&#xff1a;快递包裹封条&#xff0c…...

C#结构体(Struct)详解

在 C# 中&#xff0c;‌结构体&#xff08;struct&#xff09;‌ 是一种值类型数据类型&#xff0c;适用于封装小型数据组。与类&#xff08;class&#xff09;不同&#xff0c;结构体在栈&#xff08;Stack&#xff09;上分配内存&#xff0c;且赋值时会发生值复制。以下是结构…...

Tomato靶机通关攻略

1.安装并开启靶机 2.用Kali查询靶机IP Kali 的IP 靶机的IP 3.访问靶机 4.用御剑扫描端口 5.获取敏感目录 分别访问三个目录 6.查看目录 发现info.php并进入 查看源码&#xff0c;发现文件包含漏洞 利用漏洞查看日志文件 http://192.168.40.139/antibot_image/antibots/info…...

Go Ebiten小游戏开发:俄罗斯方块

在这篇文章中&#xff0c;我们将一起开发一个简单的俄罗斯方块游戏&#xff0c;使用Go语言和Ebiten游戏库。Ebiten是一个轻量级的游戏库&#xff0c;适合快速开发2D游戏。我们将逐步构建游戏的基本功能&#xff0c;包括游戏逻辑、图形绘制和用户输入处理。 项目结构 我们的项…...

Github 2025-03-12 C开源项目日报Top5

根据Github Trendings的统计,今日(2025-03-12统计)共有5个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目5C++项目1Lean的LEDE源码:为国产龙芯LOONGSON SoC loongarch64/飞腾Phytium腾锐2000系列架构添加支持 创建周期:2338 天开发语言:C协议类…...

【机器学习-基础知识】统计和贝叶斯推断

1. 概率论基本概念回顾 1. 概率分布 定义: 概率分布(Probability Distribution)指的是随机变量所有可能取值及其对应概率的集合。它描述了一个随机变量可能取的所有值以及每个值被取到的概率。 对于离散型随机变量,使用概率质量函数来描述。对于连续型随机变量,使用概率…...

Unity3D 着色器优化(Shader Optimization)

前言 Unity3D 着色器&#xff08;Shader&#xff09;优化是提升渲染性能的关键环节&#xff0c;尤其是在移动设备或复杂场景中。以下是系统的优化策略和实践建议&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经…...

基于SpringBoot的“体育购物商城”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“体育购物商城”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体模块设计 前台用户登录界面 系统首页界面…...

数据库约束

数据库约束 1. NULL约束2. UNIQUE&#xff1a;唯一约束3. DEFAULT&#xff1a;默认值约束4. PRIMARY KEY&#xff1a;主键约束5. FOREIGN KEY&#xff1a;外键约束6. CHECK约束 数据库约束是关系型数据库的一个重要功能&#xff0c;主要作用是保证数据的正确性&#xff0c;也就…...

【经典算法】Leetcode-零钱兑换问题

一、题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。你可以认为每种硬币的数量是无限的…...

Go 语言使用Protobuf 进行序列化详解

文章目录 Go 语言使用Protobuf 进行序列化详解1. Protobuf是什么?2. 安装Protobuf 及 Go 依赖3. 编写.proto 文件4. 实现序列化和反序列化 Go 语言使用Protobuf 进行序列化详解 1. Protobuf是什么? 以下是 Protobuf 官方中文文档的概述: Protobuf(Protocol Buffers) 是一种…...

Windows控制台函数:标准输入输出流交互函数GetStdHandle()

目录 什么是 GetStdHandle&#xff1f; 它长什么样&#xff1f; 怎么用它&#xff1f; 它跟 std::cout 有什么不一样&#xff1f; GetStdHandle 是一个 Windows API 函数&#xff0c;用于获取标准输入、标准输出或标准错误设备的句柄。它定义在 Windows 的核心头文件 <…...

自然语言处理初学者指南

文章目录 一、说明二、自然语言处理发展史2.1 最早的自然语言处理简介2.2 历史2.3 NLP 的早期工作 三、NLP的现代方法3.1 单词编码3.2 循环神经网络3.3 强化学习3.4 深度学习 四、更进一步的方法 一、说明 对于初学者来说&#xff0c;自然语言处理的发展历史非常有必要了解&am…...

Kubernetes教程(七)了解集群、标签、Pod和Deployment

了解集群、标签、Pod和Deployment 一、K8s资源对象二、K8s集群1. Master2. Node 三、Namespace&#xff08;命名空间&#xff09;四、Label&#xff08;标签&#xff09;五、Pod1. 共享网络命名空间2. 共享数据 六、工作负载1. 设置副本数2. 应用升级 结语 Kubernetes的知识真的…...

【BUG分析】微服务无法读取Nacos中的共享配置

项目场景 基于Spring Cloud微服务的商城系统。 使用Nacos进行统一配置管理&#xff0c;在bootstrap.xml中读取配置参数。 问题描述 购物车微服务可以读取Nacos中的共享mybatis配置&#xff0c;商品管理微服务却读不到&#xff0c;启动报错提示无法配置数据库源&#xff1a; …...

SpringMVC (一)基础

目录 SpringMVC 一 简单使用 1 新建模块选择指定参数 2 创建实现类 3 将项目启动 4 运行结果&#xff1a;在浏览器当中响应执行 二 RequestMapping 三 请求限定 SpringMVC SpringMVC是Spring的web模块&#xff0c;用来开发Web应用&#xff0c;SpringMVC应用最终作为B/…...

【ES6】ES6中的类

基础定义和使用 class Animal {constructor(name, species, age) {this.name namethis.species speciesthis.age age} }let dog new Animal("Spot", "Dog", 4)私有变量 变量名前带#即可。 Getter 和Setter方法 继承 // 父类 class Point{construc…...

兴达易控Profinet 转 ModbusTCP跨网段通信模块

Profinet 转 ModbusTCP/跨网段通信模块 Profinet转ModbusTCP/跨网段通信模块&#xff0c;作为现代工业自动化系统中不可或缺的重要组件&#xff0c;正日益受到广泛关注和应用。 这种模块的核心功能是将Profinet网络协议转换为Modbus TCP协议&#xff0c;实现不同网络之间的无缝…...

linux 的免密切换用户PAM配置

/etc/pam.d/su是Linux系统中与用户切换&#xff08;su命令&#xff09;相关的PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;配置文件。以下是对它的详细介绍&#xff1a; 简介 作用 PAM是一种用于管理系统认证的机制&#xff0c;…...

使用 Python pandas操作 Excel 文件

使用 Python pandas 操作 Excel 文件 flyfish pandas 是 Python 中一个强大的数据处理和分析库&#xff0c;它提供了丰富的数据结构&#xff08;如 Series 和 DataFrame&#xff09;和数据操作方法&#xff0c;能够方便地处理各种数据格式&#xff0c;包括 Excel 文件。 安装…...

UE5.5 Niagara 发射器粒子更新模块

Particle State &#xff08;粒子状态&#xff09;模块 Particle State 主要用于控制粒子的生存状态&#xff0c;包括死亡、消失、响应事件等。 Particle State Kill Particles When Lifetime Has Elapsed 当粒子的生命周期结束时&#xff0c;销毁这些粒子。 Lifetime &…...

状态模式的C++实现示例

核心思想 状态模式&#xff08;State Pattern&#xff09; 是一种行为设计模式&#xff0c;允许对象在其内部状态改变时改变其行为。它将状态相关的逻辑分散到不同的状态类中&#xff0c;避免了使用大量的条件语句来处理不同状态下的行为。 状态抽象化&#xff1a;将对象的状…...

ThinkPHP8.0+MySQL8.0搭建简单实用电子证书查询系统

客户花了100元买了一个系统&#xff0c;开始不能导入&#xff0c;到处找人帮忙解决。给解决能导入了&#xff0c;不能修改&#xff0c;满足不了用户的需求。用户一狠心&#xff0c;花200块钱&#xff0c;叫我给他定制了一个电子证书查询系统。还免费给部署到服务器。惭愧惭愧……...

STM32全系大阅兵(2)

接前一篇文章:STM32全系大阅兵(1) 本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客...

upload-labs通关攻略 【Pass-01~Pass-19】

注意&#xff1a;GitHub中upload-labs有多个版本:19关、21关、23关。版本不同&#xff0c;关卡的顺序也很可能不同。此次例子是21关。 项目地址&#xff1a;https://github.com/c0ny1/upload-labs 一、Pass-01 【js前端检测的绕过】 1. 打开Pass-01 访问&#xff1a;ip/uploa…...

HCIP复习拓扑练习(修改版)

拓扑&#xff1a; 实际&#xff1a; 需求&#xff1a; 需求分析 1.这意味着学校内部网络能够正常解析域名并进行互联网访问。 2. PC1和PC2处于同一个内网192.168.1.0/24&#xff0c;其中PC1有权限访问外部网段3.3.3.0/24&#xff0c;而PC2没有。这涉及ACL&#xff08;访问控制…...

Zabbix 7.2 + Grafana 中文全自动安装ISO镜像

简介 ​ 基于Zabbix 官方的Alma Linux 8 作为基础镜像。 镜像源都改为国内大学镜像站&#xff0c;自动联网安装ZabbixGrafana。 安装中文字体、Zabbix和Grafana也配置默认中文。 Zabbix 也指定中文字体&#xff0c;绘图无乱码。 配置时区为东八区&#xff0c;Zabbix配置We…...

使用 Python 将 PDF 转换为文本:打造一个简单高效的提取工具

在数字化时代&#xff0c;PDF 文件是我们日常生活中常见的文档格式。无论是学术论文、工作报告还是电子书&#xff0c;PDF 的广泛使用让提取其中文字内容成为一个常见需求。手动复制粘贴显然效率低下&#xff0c;而借助 Python&#xff0c;我们可以轻松实现自动化提取。本文将介…...

scoop退回软件版本的方法

title: scoop退回软件版本的方法 date: 2025-3-11 23:53:00 tags: 其他 前言 在软件更新后&#xff0c;如果出现了很影响使用体验的问题&#xff0c;那么可以把软件先退回以前的版本进行使用&#xff0c; 但是scoop本身并没有提供直接让软件回退版本的功能&#xff0c;因此…...