news 2026/7/19 10:51:54

Unity数字孪生实战:本地化部署3D Tiles城市模型全流程指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Unity数字孪生实战:本地化部署3D Tiles城市模型全流程指南

1. 项目概述:为什么我们要告别Cesium ion?

如果你正在用Unity做数字孪生、智慧城市或者任何需要真实地理空间3D场景的项目,那么Cesium for Unity这个插件大概率已经躺在你的项目列表里了。它确实强大,能让你在Unity里直接加载全球地形和影像,但很多朋友卡在了第一步:加载自己的3D城市模型。官方的标准流程是,你得把模型上传到Cesium ion——一个在线的、按流量收费的托管服务。这带来了几个现实问题:数据安全(你的核心资产要传到云端)、持续成本(项目大了流量费不菲)、网络依赖(离线环境或内网部署直接歇菜),以及定制化限制(ion的切片策略是固定的)。

所以,“告别Cesium ion依赖”不是一个口号,而是很多严肃项目必须迈出的一步。核心思路很清晰:我们自己动手,把庞大的3D城市模型(比如从倾斜摄影、BIM或手工建模来的.osgb、.obj、.fbx等格式),通过CesiumLab这款国产神器,预先处理(也就是“切片”)成Cesium原生支持的3D Tiles格式。然后,把这些切片数据放在本地或者我们自己的服务器上,最后在Unity里通过Cesium for Unity插件进行加载和渲染。整个过程完全绕开Cesium ion,实现数据自主、部署自由。

这适合谁呢?所有需要在Unity中集成大规模、高精度真实世界3D场景的开发者,无论是做自动驾驶仿真、城市规划评审、应急演练,还是游戏开发中的开放世界地图。接下来,我会手把手带你走通全流程,并分享我踩过的那些坑和总结出的实战技巧。

2. 核心工具链与工作流设计

在动手之前,我们必须理清整个技术栈和数据处理流水线。一个高效、可控的工作流是项目成功的基石。

2.1 工具选型与角色定位

  1. CesiumLab (核心处理工具)

    • 角色:数据转换与切片引擎。它是整个流程的“厨房”,负责将生硬的原始3D模型“烹饪”成Cesium能高效消化的“菜肴”——3D Tiles。
    • 为什么是它?相比官方命令行工具3d-tiles-tools,CesiumLab提供了图形化界面,对多种源格式(尤其是国内常见的OSGB倾斜摄影模型)支持更好,参数调节直观,并且集成了坐标转换、数据过滤、纹理压缩等一站式功能。对于大多数团队来说,它的学习成本和效率平衡得最好。
    • 版本注意:确保下载的CesiumLab版本与你的数据格式兼容。处理倾斜摄影模型通常需要“倾斜摄影”相关的版本或模块。
  2. Cesium for Unity (Unity运行时插件)

    • 角色:Unity场景中的3D Tiles渲染器与调度器。它负责在Unity中创建Cesium3DTileset对象,加载、解析并渲染我们产出的切片数据,同时处理LOD(细节层次)、视锥体裁剪等。
    • 获取方式:通过Unity的Package Manager,从GitURL添加https://github.com/CesiumGS/cesium-unity.git。务必关注其版本与你的Unity编辑器版本的兼容性。
  3. 数据服务器 (可选,用于网络加载)

    • 角色:切片数据的托管方。如果最终发布为WebGL或需要多客户端访问,你需要一个HTTP服务器来托管切片文件。
    • 选择:极其简单。任何能提供静态文件服务的Web服务器都可以,比如Nginx、Apache,甚至是一个简单的Pythonhttp.server。关键在于正确配置CORS(跨域资源共享),否则浏览器会阻止Unity WebGL加载数据。对于纯本地或单机桌面应用,直接使用file://协议或Unity的StreamingAssets路径即可。

2.2 端到端工作流拆解

整个流程可以清晰地分为离线的“数据生产”和在线的“数据消费”两个阶段:

原始3D模型 (OSGB/FBX/OBJ等) ↓ [CesiumLab] ├── 坐标系统一与转换 (WGS84) ├── 模型简化与纹理优化 ├── 三维空间分割 (切片/瓦片化) └── 输出3D Tiles数据集 (含tileset.json) ↓ 3D Tiles切片文件 (本地文件夹) ↓ [部署] ├── 方案A: 放入Unity项目的`StreamingAssets` (纯本地) └── 方案B: 上传至自建HTTP服务器 (网络加载) ↓ [Unity运行时] └── 通过`Cesium3DTileset`组件加载`tileset.json` ↓ 在Unity中实时渲染3D城市

这个工作流的核心优势在于解耦。数据处理(CesiumLab)和程序开发(Unity)可以并行。美术或GIS工程师负责用CesiumLab产出标准数据包,开发者只需关心在Unity中加载这个数据包,双方通过tileset.json这个“菜单”契约进行交互。

3. 使用CesiumLab进行模型切片:从入门到精通

这是整个流程中最关键、最易出错的环节。我们将以一个常见的倾斜摄影OSGB数据为例,详细讲解每一步。

3.1 数据准备与预处理

在打开CesiumLab之前,先整理好你的源数据。

  • 模型格式:确保你的模型是CesiumLab支持的格式。对于城市级模型,常见的是:
    • OSGB:倾斜摄影测量成果的标准格式,通常是一个包含大量.osgb文件和metadata.xml的文件夹。
    • FBX/OBJ:来自3ds Max、Blender等建模软件的通用格式。
    • 3D Tiles:如果已经是此格式,可能只需要进行重组或优化。
  • 坐标系确认:这是重中之重!你的原始模型数据必须带有正确的坐标系信息(例如CGCS2000、UTM等)。你需要知道它的EPSG代码(如EPSG:4547)。如果数据不带空间参考,后续的定位将完全错误。通常从测绘部门或无人机处理软件(如ContextCapture、大疆智图)导出的数据会包含此信息。
  • 纹理与模型优化:在导入CesiumLab前,可酌情用专业软件(如Blender、FME)进行预处理:合并过多的小物体、简化过高面数的模型、压缩纹理尺寸(2048x2048通常足够)。这能极大缩短后续切片时间并提升运行时性能。

3.2 CesiumLab切片参数详解与实战

启动CesiumLab,选择对应的功能模块(例如“倾斜摄影” -> “OSGB转换”)。

  1. 第一步:添加数据与坐标设置

    • 将你的OSGB数据文件夹拖入或通过“添加”按钮导入。CesiumLab会自动读取metadata.xml
    • 关键参数:输出坐标系。必须设置为WGS84 (EPSG:4326)。这是Cesium使用的全球地理坐标系。CesiumLab会自动帮你完成从源坐标系到WGS84的转换。你需要在下拉框中选择或输入正确的源坐标系(即你上一步确认的坐标系)。如果列表里没有,你需要知道其EPSG代码并在“自定义”中输入。
    • 注意:坐标转换错误会导致模型位置偏移几百甚至上千公里。如果对坐标系不确定,可以用一个已知经纬度的点来验证。例如,在原始数据中找一个标志性建筑,查得其真实经纬度,在CesiumLab预览中查看转换后该点位置是否正确。

  2. 第二步:切片参数配置(性能与质量的权衡)这是决定最终数据体积和渲染性能的核心步骤。

    • 几何误差(Geometric Error):这是3D Tiles LOD切换的核心阈值。单位是米。它表示当某个瓦片在屏幕空间产生的投影误差大于此值时,就需要用更精细的子瓦片来替换它。设置原则:根瓦片(最粗糙层级)设置一个较大的值(如100),叶子瓦片(最精细层级)设置一个较小的值(如0.1)。CesiumLab通常提供“层级配置”界面,你可以为不同层级设置不同的几何误差。值越小,模型越早切换到精细模型,质量越高,但加载的瓦片越多,性能压力越大。新手建议:可以先使用软件推荐的默认配置进行测试。
    • 瓦片划分方式
      • 常规划分:适用于分布均匀的模型。你需要设置“最大瓦片大小”(如50MB),当瓦片超过此大小时,软件会将其一分为二。
      • 四叉树/八叉树:适用于具有空间层次结构的数据。对于平面展开的城市模型,四叉树(基于地理范围划分)更高效;对于具有高度差异的复杂模型,八叉树(同时分割空间)更合适。CesiumLab对倾斜摄影通常有优化过的内置划分策略。
    • 纹理压缩:强烈建议开启。可以选择KTX2Basis Universal格式。这能将PNG/JPG纹理转换为GPU更友好、体积更小、支持更快加载的格式,对WebGL和移动端性能提升巨大。
    • 输出设置:指定一个干净的输出文件夹。给任务起个有意义的名字,然后点击“开始”或“转换”。
  3. 第三步:监控与结果验收

    • 切片过程可能很长,取决于模型大小和机器性能。CesiumLab会显示进度和预估时间。
    • 完成后,检查输出文件夹。你会看到一个tileset.json文件和一系列以.b3dm(Batced 3D Model,最常见的瓦片格式)或.pnts(点云)等为后缀的文件夹。tileset.json是整个3D Tiles数据集的入口描述文件,Unity就是通过加载它来索引所有瓦片的。
    • 用CesiumLab自带的“预览”功能快速打开生成的tileset.json,检查模型位置、纹理、LOD切换是否正常。这是验证切片成果最直接的方法。

4. 在Unity中加载与配置3D Tiles

数据准备好了,现在切换到Unity战场。

4.1 环境搭建与数据导入

  1. 安装Cesium for Unity:在Unity中,打开Window -> Package Manager,点击“+”号选择“Add package from git URL”,输入https://github.com/CesiumGS/cesium-unity.git。等待安装完成。安装后,菜单栏会出现“Cesium”选项。
  2. 导入切片数据:将CesiumLab生成的整个输出文件夹(包含tileset.json和所有子文件夹)复制到你的Unity项目的Assets/StreamingAssets目录下。如果StreamingAssets不存在,就创建一个。这是Unity用于存放不需要额外处理的原始数据(如视频、音频、二进制文件)的标准文件夹,可以通过Application.streamingAssetsPath路径访问。对于桌面平台,数据会被直接打包;对于WebGL,它会成为构建输出的一部分。

4.2 创建与配置Cesium3DTileset

  1. 创建Tileset对象:在Unity场景中,右键点击Hierarchy面板,选择Cesium -> 3D Tiles -> 3D Tileset。这会在场景中创建一个名为“Cesium3DTileset”的GameObject。
  2. 指定数据源:选中新建的GameObject,在Inspector面板找到Cesium 3D Tileset组件。在Url字段中,你需要填写tileset.json的路径。
    • 如果数据在StreamingAssets中:路径格式为file://+ 绝对路径,或者更推荐使用相对路径。例如,如果你的数据放在StreamingAssets/CityModel/下,那么Url可以填:{StreamingAssets}/CityModel/tileset.json。Cesium for Unity会自动识别{StreamingAssets}这个标记。
    • 如果数据在远程服务器上:Url填完整的HTTP地址,例如http://your-server.com/tiles/CityModel/tileset.json务必确保服务器已正确配置CORS头(例如Access-Control-Allow-Origin: *),否则WebGL构建会加载失败。
  3. 关键组件参数解析
    • Maximum Screen Space Error:这个值对应切片时设置的几何误差。它控制了LOD切换的激进程度。值越小,视觉质量越高(更早使用精细瓦片),但加载请求更频繁。通常保持默认值即可,或在运行时根据性能动态调整。
    • Maximum Cached Bytes:缓存容量。加载过的瓦片会留在内存中,超出此容量后会按LRU(最近最少使用)策略释放。根据你的模型总大小和设备内存来设置,通常设置为模型总大小的1.5-2倍。
    • Preload AncestorsPreload Siblings:预加载策略。开启后,在加载当前精细瓦片时,会同时加载其父瓦片(更粗糙)和兄弟瓦片(相邻区域),可以减少缩放和漫游时的加载延迟,但会增加初始带宽消耗。对于需要流畅漫游的应用建议开启。
    • Show Credits:是否显示数据来源署名。如果用的是自产数据,可以关闭。

4.3 坐标对齐与场景集成

  1. 定位到正确区域:默认情况下,Cesium3DTileset会根据其tileset.json中的地理范围,将自己放置在Cesium World Terrain(全球地形)的相应位置。如果你的Unity场景原点(0,0,0)不在那个地理位置,你会发现模型“飞”到了很远的地方。
  2. 两种集成方式
    • 方式一:将Unity场景移至模型处(推荐用于纯地理场景)。你可以先运行场景,让Cesium加载出模型,然后在Scene视图观察模型位置。记下Cesium3DTileset GameObject的Transform位置(这是一个巨大的经纬度高程值)。然后,你可以创建一个空的父GameObject,将主摄像机、灯光等所有你的游戏对象都作为其子物体,然后将这个父物体移动到与Tileset相同的位置。这样,你的游戏世界就与真实地理坐标对齐了。
    • 方式二:将模型作为子物体集成到现有Unity场景。如果你的Unity场景有自己的游戏逻辑和坐标系,不希望原点变动。你可以通过脚本,在运行时动态计算一个偏移矩阵,将Cesium的地理坐标转换到你本地场景的某个原点附近。这更复杂,需要处理坐标系转换。一个常见的做法是,以模型中某个标志点的经纬度为锚点,计算其与Unity世界原点的偏移,然后调整Cesium3DTileset的Transform或通过其API进行平移。
  3. 光照与材质适配:Cesium 3D Tiles使用的是glTF 2.0标准的PBR(基于物理的渲染)材质。确保你的Unity场景使用了支持PBR的渲染管线(如内置渲染管线的Standard着色器,或URP/Lit着色器)。检查场景中的方向光是否设置合理,以便模型能正确接收光照和阴影。有时可能需要为Tileset单独调整曝光或后处理效果。

5. 性能优化与高级技巧

将城市级模型跑起来只是第一步,让它跑得流畅才是挑战。

5.1 渲染性能优化

  1. 细节层次(LOD)调优:回顾在CesiumLab中设置的几何误差。如果在Unity中近距离观察时模型切换粗糙层级不够及时(有“像素化”感),可能需要减小Maximum Screen Space Error。反之,如果频繁卡顿(频繁加载瓦片),可以适当增大该值。这是一个在视觉质量和帧率之间的权衡过程。
  2. 视锥体与遮挡剔除:Cesium for Unity默认会进行视锥体裁剪,只加载视野内的瓦片。确保你的摄像机视锥体设置合理,避免过大的Far Clip Plane导致加载过多不可见瓦片。对于非常密集的城市模型,可以考虑在Unity中启用遮挡剔除(Occlusion Culling),但需要为Tileset生成遮挡数据,这对动态物体效果有限,对静态城市建筑群可能有效。
  3. GPU Instancing:对于3D Tiles中大量重复的简单几何体(如标准化的树木、路灯),如果它们在原始建模时就是实例化的,并且导出格式支持,Cesium运行时可能会使用GPU Instancing进行渲染,这会极大提升绘制效率。这更多依赖于原始数据和导出设置。

5.2 加载与缓存策略

  1. 分块加载与流式传输:3D Tiles本身就是为流式传输设计的。确保你的Maximum Simultaneous Tile Loads(同时加载瓦片数)设置在一个合理范围(如4-16)。太高会阻塞网络和IO,太低会导致加载过慢。
  2. 磁盘与内存缓存Maximum Cached Bytes决定了内存缓存大小。对于桌面端应用,可以设置得大一些(如2GB)。Cesium for Unity也可能使用磁盘缓存(尤其是在WebGL中,使用IndexedDB),这能极大提升同一场景的二次加载速度。确保你的应用有足够的磁盘空间权限。
  3. 网络加载优化:对于WebGL部署,将切片文件部署在支持HTTP/2Brotli/Gzip压缩的服务器上,可以显著减少加载时间和流量。将瓦片文件(.b3dm, .pnts)进行压缩存储,服务器配置在传输时动态解压。

5.3 数据更新与动态交互

  1. 局部模型更新:城市不是一成不变的。如果需要更新某栋建筑,最直接的方法是替换该建筑对应的瓦片文件。但这需要你知道该建筑在3D Tiles瓦片树中的具体位置(哪个.b3dm文件)。更高级的做法是,在切片时就将需要频繁更新的物体分离到独立的瓦片集中,在Unity中通过多个Cesium3DTileset对象分别加载,然后单独更新那个小的Tileset。
  2. 点击拾取与属性查询:Cesium for Unity提供了射线检测功能,可以获取到点击的3D Tiles要素(Feature)。你可以通过Cesium3DTilesetPick方法,传入屏幕坐标或射线,来获取被点击的要素及其属性信息(这些属性需要在原始模型中嵌入,并在CesiumLab切片时选择保留)。这可以用来实现点击建筑显示信息牌等交互功能。
  3. 与Unity地形/物体的融合:如果你的场景中还有Unity自带的Terrain或其他Mesh,需要确保它们与Cesium 3D Tiles在海拔高度上对齐。可以使用Cesium的CesiumGeoreference组件来统一管理全球坐标到Unity局部坐标的转换,从而让Unity中的物体也能准确放置到地理位置上。

6. 常见问题排查与实战心得

这条路我走过,坑也踩过不少。下面是一些典型问题及其解决方案,希望能帮你节省大量调试时间。

6.1 数据切片阶段问题

  • 问题:CesiumLab切片失败,报错“坐标转换参数错误”或“无法读取空间参考”。
    • 排查:99%的问题出在坐标系。双击检查你的源数据是否真的含有正确的投影信息。对于OSGB,检查metadata.xml文件。尝试用GIS软件(如QGIS、Global Mapper)先打开确认数据位置是否正确。在CesiumLab中,尝试不同的源坐标系,或者使用“七参数”进行精确转换(如果你有转换参数的话)。
  • 问题:切片出来的模型在预览中位置偏移巨大。
    • 排查:首先确认预览时CesiumLab的底图是否正确(通常是OpenStreetMap)。如果模型偏移了一个固定距离,可能是中央子午线等投影参数设置错误。如果模型完全“飞”到地球另一边,可能是经纬度顺序搞反了(X是经度还是纬度?)。记录下模型上一个已知点的预览坐标,与真实坐标对比,反向推导问题。
  • 问题:切片时间过长,或者输出文件体积巨大。
    • 优化
      1. 源头优化:在导入CesiumLab前,用专业软件简化模型、降低纹理分辨率。一个4K纹理降到2K,视觉差异不大,但体积和内存占用减少75%。
      2. 切片参数:增大“最大瓦片大小”,减少瓦片总数。调整几何误差,让更粗糙的LOD能被更多地使用。
      3. 纹理格式:务必使用KTX2/Basis压缩。
      4. 硬件:确保CesiumLab使用SSD硬盘作为输出目录,内存足够大。

6.2 Unity加载与渲染阶段问题

  • 问题:Unity中Cesium3DTileset一片空白,不显示模型。
    • 排查清单(按顺序检查)
      1. Url路径:检查Url是否完全正确。对于StreamingAssets,路径是{StreamingAssets}/你的文件夹/tileset.json,注意大小写和文件夹层级。可以尝试在浏览器中输入file://[你的Unity项目绝对路径]/Assets/StreamingAssets/.../tileset.json,看是否能下载到这个json文件。
      2. 控制台错误:查看Unity Editor的Console窗口,Cesium插件通常会输出详细的加载错误信息,如“Failed to load tileset”、“CORS error”等。
      3. CORS问题(仅限网络加载):如果Url是http地址,并且发布为WebGL,浏览器的开发者工具(F12)的Network标签页会显示CORS错误。你必须在你的数据服务器上配置Access-Control-Allow-Origin响应头。
      4. Shader兼容性:某些版本的Cesium for Unity可能与你的Unity渲染管线不兼容。尝试切换不同的渲染管线(Built-in, URP, HDRP)测试,或查阅Cesium for Unity的官方文档了解兼容性说明。
  • 问题:模型显示出来,但纹理是黑的或粉红的(Missing Shader)。
    • 排查:粉红色通常意味着Shader错误或材质丢失。确保你的Unity项目包含了Cesium插件所需的所有Shader。有时在升级Unity版本或插件后,需要重新导入Shader。尝试在Cesium3DTileset组件的Material设置中,指定一个正确的、支持glTF PBR的Shader,比如Cesium自带的Cesium3DTilesetStandardShader
  • 问题:运行时帧率很低,非常卡顿。
    • 性能分析:打开Unity的Profiler窗口(Window -> Analysis -> Profiler),观察:
      • CPU主线程:是否在Cesium3DTileset.Update上花费过多时间?可能是瓦片加载逻辑开销大,尝试降低Maximum Simultaneous Tile Loads
      • GPU:是否Render时间过长?可能是面数太多或Draw Call过高。在Scene视图打开Stats面板,查看三角形数量和SetPass Call数量。优化方法见5.1节。
      • 内存GPU MemoryTotal Memory是否爆了?检查Maximum Cached Bytes是否设置过高,超过了系统承受能力。
  • 问题:WebGL构建后,模型加载失败。
    • 排查
      1. 数据打包:确认你的切片数据文件夹确实在StreamingAssets中,并且构建后,在构建输出的StreamingAssets文件夹里能找到它们。
      2. 文件路径:WebGL中不能使用file://协议。确保在代码中或组件Url里使用的路径是相对于Application.streamingAssetsPath的。Cesium for Unity的{StreamingAssets}标记在WebGL下会自动转换为正确的相对路径。
      3. 服务器配置:如果你将数据放在单独的CDN或服务器,CORS配置是必须的。同时,确保服务器正确返回了.b3dm等文件的MIME类型(例如,.b3dm可以配置为application/octet-stream)。

6.3 个人实操心得

  1. 小范围测试先行:不要一开始就拿整个城市的数据开刀。先用一小块区域(比如一个街区)的模型走通全流程。这能帮你快速验证坐标系、切片参数和加载逻辑是否正确,节省大量等待时间。
  2. 版本管理:Unity版本、Cesium for Unity插件版本、CesiumLab版本,这三者的组合可能存在特定的兼容性问题。在开始一个正式项目前,锁定一个经过验证的稳定组合,并记录在案。升级任何一环都要重新做兼容性测试。
  3. 文档与社区:Cesium for Unity的官方文档和GitHub仓库的Issue页面是你的好朋友。很多奇怪的问题可能已经有人遇到并给出了解决方案。CesiumLab也有详细的用户手册和活跃的技术支持群。
  4. 性能预算意识:在项目初期就要建立性能预算。例如,目标平台是WebGL,那么你可能需要将模型总面数控制在500万以下,单个瓦片大小控制在5MB以内。用这个预算去反推你在CesiumLab中需要设置的切片精细度和纹理压缩等级。
  5. 备份原始数据:切片过程是不可逆的。务必保留好你的原始OSGB/FBX文件。当你需要调整切片参数或修复问题时,可以从源头重新开始。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 10:51:11

Photoshop图层批量导出高效工具:5倍速工作流程优化方案

Photoshop图层批量导出高效工具:5倍速工作流程优化方案 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Adobe. 项目地址: ht…

作者头像 李华
网站建设 2026/7/19 10:50:39

Blender动画GIF导出终极指南:Bligify插件5步快速上手教程

Blender动画GIF导出终极指南:Bligify插件5步快速上手教程 【免费下载链接】Bligify Blender addon for exporting and importing animated GIF sequences 项目地址: https://gitcode.com/gh_mirrors/bl/Bligify 你是否曾为将精美的Blender 3D动画转换为社交媒…

作者头像 李华
网站建设 2026/7/19 10:49:51

如何一键为离线音乐库添加精准同步歌词:LRCGET完全指南

如何一键为离线音乐库添加精准同步歌词:LRCGET完全指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 在数字音乐时代,歌词不仅…

作者头像 李华
网站建设 2026/7/19 10:49:26

全面解锁WeMod专业版:Wand-Enhancer让游戏修改体验升级

全面解锁WeMod专业版:Wand-Enhancer让游戏修改体验升级 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你是否曾经在游戏关键时刻被WeM…

作者头像 李华
网站建设 2026/7/19 10:49:18

强力解决方案:用BG3 Mod Manager彻底解决博德之门3模组管理难题

强力解决方案:用BG3 Mod Manager彻底解决博德之门3模组管理难题 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 还在为《博德之门3》模组…

作者头像 李华
网站建设 2026/7/19 10:48:41

Nginxpwner:5分钟自动化检测15种Nginx配置安全风险

Nginxpwner:5分钟自动化检测15种Nginx配置安全风险 【免费下载链接】nginxpwner Nginxpwner is a simple tool to look for common Nginx misconfigurations and vulnerabilities. 项目地址: https://gitcode.com/gh_mirrors/ng/nginxpwner 在当今云原生和微…

作者头像 李华