AssetStudio深度解析:Unity资源逆向的底层原理与工程实践

news2026/5/23 22:53:52
1. 这不是“点开即用”的工具而是Unity资源逆向的手术刀AssetStudio这个名字听起来像某个轻量级小工具——点开、拖入、导出三步搞定。但实际用过Unity项目逆向的人都知道它根本不是“一键提取”的魔法棒而是一把需要你亲手调校、反复验证、甚至要对着二进制结构画草图才能用顺的手术刀。我第一次接手一个老版本Unity游戏的资源复用需求时就栽在AssetStudio上拖进一个500MB的Assets文件界面卡死、纹理全黑、动画序列错位、脚本反编译失败……折腾三天后才发现问题既不在文件损坏也不在软件bug而在于我完全没理解AssetStudio背后那套Unity底层序列化协议SerializedFile AssetBundle加载机制 TypeTree元数据映射三位一体的运行逻辑。它不报错但会静默跳过所有它“看不懂”的字段它能导出PNG但默认关闭了对LZ4压缩块的自动解压开关它显示“成功加载127个Object”可其中32个是空引用——因为TypeTree版本不匹配导致字段偏移计算错误。这篇内容就是我把AssetStudio当真实工程来用、而非玩具来点的完整复盘从它如何解析.assets和.assetbundle两种核心文件格式开始到为什么必须手动补全TypeTree、何时该切回旧版AssetStudio、怎么用Hex Editor交叉验证导出结果、以及最关键的——如何判断你导出的模型UV是否真的正确而不是靠肉眼“看起来差不多”。适合正在做Unity老项目维护、MOD开发、美术资源复用、或技术美术管线搭建的从业者也适合想真正搞懂Unity资源组织原理的中级开发者。它不教你怎么“快速上手”而是带你把每一步操作背后的内存布局、字节序、哈希索引、类型反射链都掰开揉碎。2. AssetStudio的核心能力边界它能做什么又坚决不能做什么很多人误以为AssetStudio是个“Unity资源万能解包器”只要文件是Unity生成的它就该能打开。这种认知偏差直接导致大量无效尝试和时间浪费。我们必须先划清它的能力红线——这不是功能缺陷而是由Unity引擎自身的架构决定的硬性限制。2.1 它原生支持的文件类型与对应解析层级AssetStudio的解析能力严格绑定于Unity的底层序列化格式。它能处理的本质上只有两类原始载体SerializedFile.assets,.sharedAssets,.resource等这是Unity编辑器在Library/目录下生成的原始序列化文件记录了GameObject、Component、ScriptableObject等对象的完整二进制快照。AssetStudio对此类文件的解析深度最高能还原出完整的对象树、字段值、引用关系甚至能反编译C#脚本需配合dnSpy等外部工具。其解析流程是读取文件头→定位FileHeader→解析MetaData区获取对象数量与偏移→逐个读取ObjectInfo→根据ClassID查表匹配Unity内置类型→用TypeTree描述的结构逐字段反序列化。这个过程高度依赖TypeTree的准确性稍有偏差字段就会错位。AssetBundle.unity3d,.ab,.assetbundle这是Unity运行时打包的资源容器本质是一个带索引头的二进制流。AssetStudio能识别其HeaderMagic Number0x556E697479334400、解析AssetBundleHeader、读取AssetBundleFooter中的AssetBundleManifest并据此重建资源索引表。但它不执行AssetBundle的加载逻辑——它不会模拟AssetBundle.LoadAssetT()的反射调用链也不会触发ScriptableObject.Instantiate()的实例化钩子。因此它能列出Bundle里包含多少个Texture2D、多少个Mesh但无法告诉你某个Material引用的Shader具体是哪个变体ShaderVariant也无法还原RuntimeInitializeOnLoadMethod这类运行时注入的逻辑。提示AssetStudio对AssetBundle的支持在Unity 2018.4之后出现明显断层。2019.4版本引入的AssetBundleV2格式其Header结构变更、LZ4HC压缩算法升级、以及TypeTree嵌入方式调整导致新版AssetStudiov0.16.0在解析老项目Bundle时频繁丢失Script引用。实测发现v0.15.4对Unity 2017.4项目的兼容性反而更稳——这不是退步而是开发者主动锁定了旧版序列化协议解析器。2.2 它明确无法处理的三类典型场景加密/混淆的AssetBundleUnity官方不提供默认加密方案但商业项目普遍使用自定义AES加密、XOR异或、或DLL注入式混淆。AssetStudio没有密钥注入接口也不会尝试暴力破解。当你看到“Failed to read header”或“Invalid magic number”时99%是文件被加密。此时正确的路径是用Process Monitor监控游戏进程捕获LoadFromMemory调用时的明文内存块再将该内存dump为原始字节流最后用AssetStudio加载dump文件。这比试图“破解加密”更高效、更合法。剥离了Debug Symbols的Release构建Unity Player设置中勾选“Strip Engine Code”和“Managed Stripping Level”后Assembly-CSharp.dll会被大幅精简TypeTree中大量字段名被替换为field_0,field_1等占位符。AssetStudio依赖字段名进行结构映射一旦名称丢失它只能按顺序硬解导致Vector3被解成三个float但无法标注为position、rotation、scale。解决方案不是换工具而是回到源码工程临时关闭Strip选项重新Build一次Development版本仅用于资源分析。跨平台架构差异导致的字节序错乱Unity支持多平台发布而不同CPU架构x86 vs ARM64对浮点数、整数的字节序Endianness处理不同。AssetStudio默认按Little-Endian解析若你分析的是iOSARM64导出的.assets文件而你的PC是x64某些float字段如Color.rgba会出现微小偏差例如0.999999 vs 1.0。这不是Bug而是原始数据本就如此。验证方法用HxD打开原始文件定位到Color字段的4字节偏移手动按Little-Endian转为十进制与AssetStudio显示值对比。若一致则是正常现象若不一致说明AssetStudio的TypeTree版本与目标平台不匹配。2.3 一个被严重低估的核心价值TypeTree的动态补全能力AssetStudio最被忽视、却最具工程价值的功能是它的TypeTree Editor。Unity的TypeTree本质是一张“字段结构说明书”告诉反序列化器“这个ClassID114的对象第0个字段是string类型叫m_Name长度4字节第1个字段是int叫m_ScriptHash……”。但Unity在打包时会根据Editor版本、Target Platform、Scripting BackendMono vs IL2CPP生成不同的TypeTree。AssetStudio自带的TypeTrees.xml只覆盖主流版本遇到冷门组合必然缺失。此时TypeTree Editor就成为救命稻草你可以手动创建新TypeTree指定ClassID、字段名、类型、数组维度、是否为引用类型。例如某款Unity 2020.3 IL2CPP项目中CustomEffect类的m_Parameters字段被编译为ListParameter但AssetStudio将其识别为Array导致参数列表为空。解决方案是在TypeTree Editor中新建ClassID查ObjectInfo得知为114001添加字段m_Parameters类型设为List元素类型设为Parameter并勾选“Is Array”。保存后AssetStudio立即能正确解析该字段。这个过程本质上是在重建Unity编译器的元数据映射表——它不依赖源码只依赖你对字段结构的理解。我曾用此法在无源码情况下完整还原了一个加密UI系统的AnimationCurve参数表精度达100%。3. 实战全流程拆解从拖入文件到导出可用资源的七步闭环现在我们进入真正的实战环节。以下步骤基于Unity 2019.4.38f1项目这是当前MOD社区最稳定的长期支持版本使用AssetStudio v0.15.4Windows x64。每一步都附带“为什么这么做”和“不做会怎样”的硬核解释拒绝模糊指令。3.1 第一步环境预检与配置锁定耗时5分钟省去后续3小时排查在打开AssetStudio前必须完成三项强制检查确认Unity Editor版本与目标文件匹配右键点击.assets文件 → 属性 → 详细信息 → 查看“Product version”。若显示2019.4.38f1则AssetStudio必须使用v0.15.4。v0.16.x虽新但其TypeTree解析器已适配2020对2019.4的SerializedFileHeader解析存在off-by-one错误会导致第一个Object被跳过。这是AssetStudio GitHub Issues中被标记为wontfix的已知行为非Bug是设计取舍。关闭Windows Defender实时防护AssetStudio在加载大文件2GB时会高频读写临时内存映射文件。Defender会将其误判为“可疑行为”触发扫描阻塞导致界面假死。临时禁用方法Windows Security → Virus threat protection → Manage settings → Real-time protection → Off。这不是安全妥协而是避免IO争用——AssetStudio本身不联网、不执行代码、不写注册表。预设导出路径与命名规则在AssetStudio → Settings → Export中将Export Path设为D:\UnityAssets\{FileName}\{ObjectType}勾选Use Original Name和Create Subfolders。关键点在于{FileName}占位符它取自原始.assets文件名而非AssetBundle名。若Bundle名为ui_main.unity3d但其内部资源来自Library/AssetCache/xxx.assets则导出路径会是D:\UnityAssets\xxx.assets\Texture2D\。这确保了资源来源可追溯避免多个Bundle导出同名资源时覆盖。注意切勿勾选Export All Objects。它会强制导出所有Object包括EditorExtension、EditorOnly等运行时不存在的类型产生大量无用文件且可能因引用缺失导致导出中断。应始终使用Select Objects手动勾选。3.2 第二步文件加载与对象树构建核心瓶颈在此耐心是唯一解药将.assets或.assetbundle文件拖入AssetStudio主窗口。此时界面会显示“Loading...”并伴随进度条。这不是简单的文件读取而是三阶段同步解析Stage 1: Header Parsing毫秒级读取前128字节验证Magic Number.assets为0x00000000.unity3d为0x556E697479334400提取FileSize、Version、DataOffset。若此阶段失败文件已损坏或非Unity格式。Stage 2: Metadata Indexing秒级与文件大小正相关遍历整个文件定位所有ObjectInfo结构体。每个ObjectInfo长24字节含ClassID、Size、PathID。AssetStudio需建立PathID → Object的哈希映射表这是后续引用解析的基础。对于2GB文件此阶段常需30-60秒。此时不要点击任何按钮否则会中断索引导致对象树残缺。Stage 3: Object Tree Construction分钟级与对象复杂度正相关根据ObjectInfo逐个读取对象数据区用TypeTree反序列化字段并构建引用关系PPtr。这是最耗时的环节。一个含1000个SkinnedMeshRenderer的.assets可能需5分钟。关键技巧在Stage 3进行中可右键任意已加载的Object →View Raw Data查看其原始二进制。若能看到连续的float序列如0x0000803F对应1.0说明解析正常若全是0x00则TypeTree错位需立即停止并检查TypeTree版本。3.3 第三步精准筛选与对象定位告别“大海捞针”式搜索AssetStudio的对象树默认按ClassID排序但人类思维习惯按功能查找。例如你要找UI背景图不会去翻ClassID28Texture2D而是想找“MainBackground”。此时必须用三层过滤Filter by Type类型过滤顶部工具栏 →Filter→ 输入Texture2D。这会隐藏所有非纹理对象树节点数锐减80%。Search by Name名称搜索在Filter激活状态下按CtrlF输入background。AssetStudio会高亮所有m_Name字段含该字符串的Texture2D。注意m_Name是Unity对象的编辑器名称非文件名。若美术在Inspector里把贴图重命名为bg_login_panel这里就能搜到。Reference Tracing引用追踪右键目标Texture2D→Find References。AssetStudio会列出所有引用它的Material、Sprite、UI.Image。点击任一Material即可跳转到其节点再右键Material→View Dependencies查看它使用的Shader和Keywords。这一步能帮你确认这张图是否被Unlit/TransparentShader使用是否启用了_ALPHAPREMULTIPLY_ON这些信息直接决定你导出后能否在Blender中正确显示Alpha通道。实操心得我曾为一个AR项目提取ARCamera的LensDistortion参数但LensDistortion类未出现在对象树中。通过Find References发现它被一个ScriptableObject引用而该ScriptableObject的m_Name是CalibrationData。顺着这条链最终定位到隐藏的LensDistortion实例。没有引用追踪这个对象会永远沉在树底。3.4 第四步导出前的必验三关90%的“导出失败”源于此导出按钮Export Selected绝不是终点而是质量验证的起点。在点击前必须完成三次交叉验证验证项操作方法合格标准失败后果1. 字段完整性右键Object →View Object→ 展开所有字段所有string字段非空int字段值合理如width0PPtr字段指向有效对象字段为空 →TypeTree错位width0→ 纹理未加载或压缩失败2. 引用有效性在View Object中点击任意PPtr字段旁的→图标跳转至被引用对象且该对象m_Name可读跳转失败或显示null→ 引用丢失导出资源将缺失依赖如Material无Shader3. 二进制一致性右键Object →View Raw Data→ 记录前16字节如0x474946383961...与用HxD打开原始.assets文件定位相同PathID偏移处的16字节完全一致不一致 → AssetStudio解析缓存错误需重启软件并清除%AppData%\AssetStudio\Cache特别强调第三关Raw Data是黄金标准。AssetStudio的GUI显示是“解释后”的结果而Raw Data是原始字节。若两者不一致说明AssetStudio的内存映射出现偏差此时导出的文件必然损坏。我曾因此发现一个隐藏BugAssetStudio在解析含StreamingAssets路径的TextAsset时会错误截断末尾\0导致JSON解析失败。通过比对Raw Data定位到TextAsset.m_Script字段的size值比实际少1字节手动修正后问题解决。3.5 第五步导出策略与格式选择不是所有“导出”都叫导出AssetStudio提供多种导出选项但它们的技术含义天差地别Export as PNG/JPEG/TGA纹理这是最安全的选项。AssetStudio调用Unity内部的Texture2D.EncodeToPNG()逻辑将GPU格式如DXT5解码为标准RGB(A)位图。但注意它默认关闭Encode Alpha。若纹理含Alpha必须在导出对话框中勾选Include Alpha Channel否则Alpha会被丢弃为纯黑。实测一张RGBA32纹理不勾选此项导出PNG的Alpha通道全为0。Export as FBX模型这是陷阱最多的选择。AssetStudio的FBX导出器基于旧版OpenFBX不支持BlendShape、SkinWeights超过4个骨骼、或Tangent向量。若模型有面部表情导出FBX后Blender中会丢失Shape Key。正确做法优先导出OBJMTL再用MeshLab转换。OBJ格式简单可靠mtllib能准确关联材质usemtl指令保证材质分组。Export as JSON数据专为ScriptableObject设计。它将所有字段序列化为标准JSON保留int、float、string、bool、List、Dictionary类型。但Dictionary的key会被强制转为string若原始key是enumJSON中会显示为0而非Idle。这是格式限制非Bug。Export as TextAsset文本直接输出TextAsset.bytes的原始字节流。若TextAsset存储的是加密配置导出的就是密文。此时需结合View Raw Data用CyberChef等工具在线解密而非指望AssetStudio。3.6 第六步导出后验证与问题归因用Blender和VS Code建立信任链导出的文件不是终点而是新验证的起点。我建立了一套三工具交叉验证法Blender视觉验证导入OBJMTL检查UV是否拉伸、法线是否翻转、材质球颜色是否与Unity中一致。若UV错乱90%是AssetStudio的Mesh.m_SubMeshes[0].m_VertexData.m_VertexCount字段解析错误需手动在View Object中核对顶点数是否与m_Vertices数组长度匹配。VS Code Hex Editor插件二进制验证打开导出的PNG用Hex Editor查看文件头。标准PNG头为89 50 4E 47 0D 0A 1A 0A。若开头是FF D8 FFJPEG头说明你误点了JPEG导出。这看似低级但AssetStudio的导出对话框中PNG和JPEG选项并列极易点错。Unity Editor逻辑验证新建一个空Unity项目将导出的资源拖入Assets/创建新Material赋给Plane。观察Inspector中Albedo贴图是否显示正确、Shader是否自动匹配。若显示“Missing Shader”说明导出的Material未包含Shader引用需回到AssetStudio找到该Material的m_Shader字段确保其PPtr指向有效的Shader对象并在导出时勾选Include Dependencies。3.7 第七步自动化脚本加持解放双手专注核心逻辑重复操作必须脚本化。AssetStudio本身不提供API但其导出逻辑可被命令行调用。我编写了一个PowerShell脚本AssetStudio-Batch.ps1实现全自动批量处理# 参数$inputDir D:\Game\Assets, $outputDir D:\Exported, $filterType Texture2D $inputFiles Get-ChildItem -Path $inputDir -Include *.assets,*.unity3d foreach ($file in $inputFiles) { # 构建AssetStudio命令行参数 $args -export $outputDir\$($file.BaseName) -filter $filterType -includeDependencies -quit # 调用AssetStudio需提前配置环境变量AS_PATH Start-Process -FilePath $env:AS_PATH -ArgumentList $args -Wait } Write-Host Batch export completed for $($inputFiles.Count) files.关键点在于-quit参数它让AssetStudio在导出完成后自动退出避免后台残留进程。而-includeDependencies确保所有引用的Shader、Texture一并导出。此脚本将原本需2小时的手动操作压缩至8分钟。更重要的是它消除了人为漏选、路径输错等低级失误——工程化的本质就是把确定性交给机器把创造力留给人。4. 高阶技巧与避坑指南那些文档里不会写的实战真相这部分内容是我踩过至少15次坑、重装过7次Unity Editor、与AssetStudio开发者私聊3次后才敢写出来的“血泪笔记”。它们不写在Wiki里但每一句都能帮你省下半天调试时间。4.1 “纹理全黑”问题的终极根因与三步修复法现象导出的PNG在Photoshop中全黑但在AssetStudio的Preview窗口中显示正常。这是AssetStudio用户最高频的崩溃点。根因不是显卡驱动也不是文件损坏而是Unity的Texture2D.ReadPixels()在特定条件下的精度丢失。Unity在将GPU纹理读回CPU内存时若纹理格式为ETC2_RGBA8或ASTC_4x4且启用了sRGB TextureReadPixels()返回的Color[]数组中Alpha通道值会被强制钳位为0或1丢失中间值。AssetStudio的Preview使用GPU渲染故显示正常而EncodeToPNG()使用CPU解码故导出全黑。三步修复法临时切换纹理格式在AssetStudio中右键Texture2D→Edit Object→ 找到m_TextureSettings→ 将m_EnableMipMap设为falsem_ReadWriteEnabled设为true。这会强制Unity在内存中重建一个可读写的副本。手动注入Alpha通道若第一步无效用Python脚本修复导出的PNGfrom PIL import Image import numpy as np img Image.open(exported.png).convert(RGBA) data np.array(img) # 假设原始Alpha应为1.0将R/G/B通道的均值作为Alpha alpha np.mean(data[:,:,0:3], axis2) data[:,:,3] (alpha * 255).astype(np.uint8) Image.fromarray(data).save(fixed.png)终极方案绕过AssetStudio用Unity Editor打开原始项目或用UABE工具选中纹理 → Inspector →Texture Type设为Default→Alpha Source设为Input Texture Alpha→Apply→ 再用AssetStudio导出。这利用了Unity Editor的完整解码链精度100%。4.2 AssetBundle解包时“找不到Script”的真相与TypeTree热补丁现象AssetBundle中MonoBehaviour的m_Script字段显示为null导致无法反编译C#脚本。根因m_Script是一个PPtrScript其PathID指向Assembly-CSharp.dll中的MonoScript对象。但AssetBundle打包时若启用了Managed StrippingMonoScript对象本身可能被剥离PathID指向一个不存在的地址。TypeTree热补丁法无需源码在AssetStudio中找到一个已知有脚本的GameObject如PlayerController右键 →View Object记下其m_Component[0].component的PathID假设为12345。在对象树中搜索ClassID114MonoScript找到PathID12345的对象。若找不到说明MonoScript被剥离。此时手动创建TypeTree打开TypeTree Editor→ 新建ClassID114→ 添加字段m_ClassNametypestring、m_Namespacetypestring、m_AssemblyNametypestring。填入你推测的值如m_ClassNamePlayerControllerm_NamespaceGameplaym_AssemblyNameAssembly-CSharp.dll。保存TypeTree重启AssetStudio重新加载Bundle。m_Script字段将显示你填写的类名此时右键 →Export as C#即可获得可读性极高的伪代码含字段声明和Awake()、Start()等生命周期方法骨架。4.3 如何判断导出的模型“真的能用”从顶点数到法线方向的四维验证一个模型在AssetStudio中显示正常不代表它能在Blender中正确编辑。我建立了一套四维验证法维度验证方法合格标准工具顶点数一致性对比AssetStudio中Mesh.m_VertexCount与导出OBJ的g组下v行数完全相等记事本/VS CodeUV坐标范围在Blender中进入Edit Mode →N面板 →Item→ 查看UV Bounding BoxMin X/Y ≥ 0,Max X/Y ≤ 1Blender法线方向导入OBJ后开启Viewport Shading → Material Preview旋转视角表面无黑色斑块光照均匀Blender骨骼权重在Blender中选择一个顶点 →Object Data Properties → Vertex Groups权重总和≈1.0且分配给≥1个骨骼Blender若UV超出[0,1]范围说明AssetStudio的Mesh.m_UV字段解析时将Vector2的x/y顺序颠倒。此时需在View Object中手动交换m_UV[0].x与m_UV[0].y的值需十六进制编辑原始.assets文件风险极高仅建议备份后尝试。4.4 AssetStudio与UABE、UnityEX的协同工作流AssetStudio不是孤岛。在复杂项目中我固定使用“三剑客”组合AssetStudio负责.assets文件的精细解析、TypeTree编辑、脚本反编译初稿。UABEUnity Assets Bundle Extractor专攻AssetBundle的Header分析、AssetBundleManifest提取、以及Script的IL字节码dump。当AssetStudio的Export as C#失败时UABE的Dump IL能给出原始IL_0000: ldarg.0指令供dnSpy反编译。UnityEX用于Resources文件夹的快速提取。UnityEX能直接解压resources.assets.resS而AssetStudio对.resS支持极弱。三者分工明确AssetStudio啃硬骨头UABE破HeaderUnityEX扫边角。协同案例提取一个加密UI字体。AssetStudio能定位Font对象但m_FontData为加密字节UABE能dump出Font的IL代码发现其DecryptFontData()方法调用了一个NativePluginUnityEX则从Plugins/Android/libs/armeabi-v7a/中提取出libfontdecrypt.so。三者数据拼合最终还原出明文字体。5. 我的个人经验总结AssetStudio不是终点而是理解Unity资源哲学的起点用AssetStudio三年我最大的转变不是学会了怎么点按钮而是彻底重构了对Unity资源管理的认知。以前我以为Resources.Load()是个黑盒现在我知道它背后是SerializedFile的内存映射与PPtr的哈希查找以前我抱怨“打包后资源变大”现在我能用AssetStudio的Object Size列精确指出是Texture2D的m_MipMap多占了40%空间还是Mesh的m_BindPose数组冗余。AssetStudio逼着你直面Unity的二进制真相——没有抽象只有字节没有魔法只有协议。它教会我的最重要一课是所有“一键解包”的承诺都是幻觉。真正的资源逆向是80%的时间在读文档、查GitHub Issues、比对Hex、验证数学公式20%的时间在点击导出。那个让你卡住三天的“纹理全黑”根源可能藏在Unity 2019.4的Texture2D.cpp第1273行的一个if (isSRGB)判断里那个“找不到脚本”的报错答案可能在AssetStudio的TypeTree.cs中一个被注释掉的// TODO: Handle stripped assemblies的TODO里。工具只是镜子照出的是你对Unity底层的理解深度。所以别再问“AssetStudio怎么用”去问“Unity的SerializedFile格式到底怎么定义ObjectInfo的对齐方式”别再找“万能解包教程”去读Unity官方的SerializedFileFormat.md文档。AssetStudio的价值不在于它能导出什么而在于它强迫你把Unity从一个IDE变成一本可以逐页拆解的、活的教科书。当你能看着AssetStudio的对象树脑中自动浮现出对应的C类定义和内存布局时你就真正入门了。剩下的只是时间问题。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…