首页/新闻资讯/正文详情

从灵感到可玩版本:Alien_Quest_v101的探索游戏设计与程序化生成实践

发布时间:2026/9/25 7:23:01 来源:云帆数科 栏目:资讯中心
从灵感到可玩版本:Alien_Quest_v101的探索游戏设计与程序化生成实践
1. 从一句灵感到一个能跑起来的v101先说一下这个项目是从哪来的。我花了大概一个下午就把第一个可玩版本从零搭了出来但后来好几个月都在反复推翻重做——因为最初那版只是“能跑”根本谈不上“好玩”。Alien_Quest_v101 这个名字听起来像个正儿八经的系列作品其实它就是我在实验阶段留下的第一个构建版本号v101 代表第一轮大迭代后的产物前100次小修小改都在这个版本之前被吞掉了。这个项目的核心想法特别简单玩家扮演一名深空探测员降落到一颗未经勘测的星球上目的不是打怪而是记录和分析当地的外星生物与环境。整颗星球没有任务清单没有任何导航标记玩家依靠扫描设备、环境线索和逐步解锁的生物图鉴自己决定下一步去哪、记录什么、怎么规避危险。说白了这是一款以“观察—理解—选择”为核心的探索游戏而不是以“战斗—成长—通关”为核心的冒险游戏。我之所以想做这个方向是因为我玩过太多“外星球”主题的游戏它们本质上都是把地球上的射击逻辑换了一层皮。怪物会主动扑脸资源点是发光的小盒子任务线像流水线一样把你从一个点推到下一个点。但我一直觉得真正的异星探索应该有一种“不知所措”的基调——你不知道眼前的东西是植物还是动物不知道它有没有攻击性甚至不知道它算不算“活着”。Alien_Quest_v101 就是想把这个感觉做成一个完整的游戏循环。这篇博文我会从原型设计、生物行为逻辑、技术选型、美术方向、实测踩坑这几个维度把这一个版本从意图到落地完整拆开。适合正在做探索类独立游戏、或者对程序化生成和氛围叙事感兴趣的朋友参考。如果你还没做过完整项目里面的很多思路也可以直接用到其他类型的游戏原型里。2. 核心玩法循环观察、记录、选择而不是突突突2.1 一个下午做出来的第一个原型长什么样最早的可玩版本其实特别粗糙。我用了一张手绘的灰度地图用最简单的2D俯视角玩家从一个固定的降落点出发周围散布着十几个用不同几何图形代表的“生物”。玩家靠近某个生物时画面上会弹出一段文字描述比如“表面覆盖绒毛状结构静止不动似乎对声波敏感”。然后玩家可以打开记录面板选择把它归类为“植物”“动物”还是“未知”同时可以给它起名字。就这么一个看起来像学生作业的原型我在给几个朋友试玩之后拿到了一个非常关键的反馈他们玩完之后讲不出“剧情”但能完整复述这颗星球上每个奇怪生物的特征甚至有人给一只长得像海绵的浮空生物起了名字叫“飘”。那一刻我就确定了一件事——探索的乐趣不在于系统多复杂而在于信息怎样被呈现、怎样被玩家主动消化。从那时起我把游戏的核心循环锁定为三件事第一识别异常信号第二靠近并观察收集足够的信息片段第三在信息不完整的情况下做出判断和行动。行动可以是继续观察、记录归档、尝试接触、或者悄悄绕开。整个循环里玩家做的事情不是“操作角色战斗”而是“操作玩家的注意力”。2.2 信息的不完整感才是探索的核心燃料这个设计里我觉得最重要的一条原则是玩家永远不要拿到完整的信息。举个例子v101 里有一种看起来像岩石的生物。它的描述在第一次扫描时只会显示三条“表面存在规律的裂缝对热源无响应在特定频率的声波下裂缝会张开”。玩家这时候并不知道它是无害的、还是会在张开裂缝时释放腐蚀性气体。这个判断需要在后续的观察中逐步解锁——你可以从不同角度扫描它可以在它“张开”时保持距离记录也可以铤而走险尝试投放探测标签。这种层层递进的信息设计本质上是把“未知”当作一种可消耗的资源。未知感越强玩家的好奇心就越强而每解锁一条新信息未知感就减少一点玩家的成就感就增加一点。如果一开始就把所有属性都摊在界面上那探索就变成了“找到目标—读取数据—离开”的机械操作。我在具体实现时用了三套信息层级第一层是“外观描述”玩家只靠肉眼就能获得第二层是“行为特征”需要玩家停留观察一段时间或使用特定扫描设备第三层是“生态关联”需要把多个生物的行为数据放到一起比对才能推论出来。比如某生物只在另一种生物活动频繁的区域出现而且它表面裂缝的形状和当地一种植物的根系走向高度相似——这种跨物种的关联信息不会直接告诉你只能靠玩家自己发现。2.3 选择的分量每次判断都可能被后续环境推翻光有观察还不够探索中必须存在“选择”带来的后果否则玩家只是观光客。我在 v101 里加入了两个选择层。第一层是互动选择。面对一个活跃生物你可以选择保持距离、缓慢接近、快速移动、发出特定频率的信号、投掷食物性物品等。每种选择都会改变生物对你的反应状态——有些反应是可逆的你静静等一会儿它就恢复了有些反应是不可逆的比如你强行攻击了某种敏感生物它的整个种群都会对你保持敌对状态而且这种状态会被你的记录设备捕捉到写进你的日志里。第二层是路线选择。这颗星球上不存在“安全区”只有“相对低风险区域”。如果玩家在前半程频繁扰动环境某些区域的生物密度和行为模式就会改变导致原计划路线变得不再可行。反过来如果你选择了一条隐蔽路线绕过大量生物你会错过记录它们的机会图鉴就无法补全。这种资源取舍让玩家的每一步选择都带着真实的分量。实际操作中我一开始把选择做成单纯的“好人路线”和“坏人路线”但测试反馈很快就告诉我这样太二极管了。后来我把行为后果改成多维度变量——环境扰动值、生物警戒值、数据完整度、玩家自身的受损状态四个维度独立变化玩家不能用一套策略通吃全程。3. 异形不是敌人生物行为与环境逻辑的底层设计3.1 不写AI写“规则状态机”很多人听到“外星生物”第一反应是“做攻击性AI”。但在 Alien_Quest_v101 里我的做法是完全不做传统意义上的AI决策树取而代之的是一套“环境规则状态机”。每只生物身上挂着一堆可变参数警戒值、活跃度、趋声性、趋光性、排他性。这些参数不是由生物自身逻辑决定的而是由环境事件来驱动。比如说周围一公里内发生了一次强烈震动所有生物的警戒值会统一提高玩家持续发出某一频率的信号只有特定几种生物会产生趋声反应夜幕降临时部分生物会进入休眠另一部分会进入活跃觅食阶段。这样做的好处是整个星球的生物就像一套生态系统里的齿轮而不是一个个彼此孤立的敌人。玩家扰动任何一环整个局部生态都会产生连锁反应而这种反应不需要写复杂的AI调度代码它只是由规则自然涌现出来的结果。我用了很简单的状态机框架每个生物有“静止、观察、警戒、应激、移动、休眠”六个状态状态切换的触发条件都挂在独立的规则模块里。例如“警戒”状态下当周围30米内出现快速移动的物体就会切换到“应激”在“应激”状态下连续5秒没有检测到威胁则回退到“警戒”。整个逻辑加起来不到两百行GDScript代码但跑起来之后的效果丰富度远超我的预期。3.2 所有的“怪”都来自同一个生成种子v101 最核心的技术模块是生物生成器。它不是随机拼贴模型而是基于一套“形态—行为—生态位”三层约束的生成系统。形态层决定一只生物看起来像什么。我做了七个基础体素模板比如球形、柱形、锥形、片状、分支状、环形和流线型然后通过参数变化生成子变体。每个模板都挂着一组可复用的贴图材质池材质池里的配色从一套“星球地质色板”中抽取保证视觉统一性。行为层决定这只生物如何响应玩家和环境的输入。每个生成个体从十二种行为模块里抽取三到四种组合比如趋光、避震、群体涌现、领地标记、拟态行为、夜间发光等。行为模块之间会互相影响比如“群体涌现”和“领地标记”同时出现时生物会倾向于跟随同类移动并在新地点留下标记物质。生态位层则决定它在食物链和空间分布中的角色。我把星球划分成五种植被密度区、三类水体辐射区和两种岩石结构区每种区域里可生成的生物种类和数量都有限制。生态位还决定了生物之间的互作关系——捕食、共生、竞争、寄生都有对应的事件触发机制。这三个层面从同一个种子文件按顺序生成所以整颗星球具备“随便挑个坐标就能推理出那里的生态样貌”的一致性。玩家在图鉴里看到的信息和生成器背后的数据是完全对应的。3.3 让“危险”变得可以被理解而不是被反应堆堆砌出来异星探索中的危险如果设计得不好很容易滑向两个极端要么变成血浆横飞的恐怖射击要么变成毫无威胁的观光模拟。我在 v101 里刻意做了针对性的平衡处理。危险类型只保留了四种接触性毒性皮肤接触会引起状态异常、结构性威胁体型和环境交互导致的物理风险比如重力场异常区域的坠落物、行为性威胁生物被惊扰后产生的驱动性行为比如大规模迁徒、环境代谢威胁某些区域自身的气体循环或温度波动造成持续伤害。每一种危险都必须能被玩家的观测设备提前发现线索。比如接触性毒性的生物表皮颜色总会在同一种材质色板里面偏移行为性威胁的迁徒事件发生前附近的地面材质会预先出现微小的振纹变化环境代谢威胁区域的核心植物群种类会被限制到某一特定形态模板。这套设计让玩家不是被动挨打而是可以从蛛丝马迹里推理出危险的存在并选择主动规避或进行记录。游戏里不存在“突然死亡”所有致命事件都有至少十五秒的前置预警窗口。我始终觉得探索类游戏的紧张感应该来自“你预感到有事要发生但不确定是什么”而不是“屏幕闪红然后你死了”。4. 程序化生成之外的功夫手动打磨的星球骨架4.1 为什么没有完全依赖程序化生成聊程序化生成的时候很多独立开发者容易陷入一个误区觉得只要种子算法足够复杂世界就会自动变得有趣。但我在 v101 里踩过这个坑——第一次全自动生成的星球确实广袤玩起来却七零八落每个区域都像独立的小箱子找不到连贯的“星球感”。于是我把架构改成了混合模式。星球的地形、植被密度、水体分布这些大尺度结构继续由程序化生成但我会在最外层叠一层“手工注记系统”。简单来说就是在生成结果之上我会用编辑器手动标注二十到三十个关键区域赋予它们特殊的生态结构或事件线索。比如某一个山谷里我会手动指定“这里的生物群系全部由分支形态个体组成且所有个体都有趋声性”形成一个天然的生态观察热点。这套做法让星球保持了程序化生成带来的探索广度和不可预测性同时又具备手工场景设计才有的节奏感和引导感。玩家在地图上漫无目的地走到某个山谷突然发现这里的生物行为逻辑跟之前去过的所有地方都不一样时那种惊讶感是靠纯算法很难制造的。4.2 生成器的五套核心参数的实测调优这里把最关键的五套参数和它们的实际效果列一下方便你抄作业的时候有个起点。参数本身不复杂难的是比例和范围的取舍。生物密度阈值控制每平方公里最大个体数。我默认设在 0.4低于这个值星球显得空旷高于 0.7 时生物间交互事件太频繁玩家的注意力会被稀释。生态位衔接系数控制相邻区域间生物形态和行为的连续性。太高会让全星球看起来像一个大区域太低则会出现“生物出现在完全不适合的环境中”的违和感。实测 0.3 到 0.45 之间最舒服。信息解锁速度影响玩家获取每条新记录需要等待的观察时间。最短 5 秒最长 45 秒超过 45 秒玩家会开始焦躁低于 5 秒则没有“记录感”。死亡事件频率系数控制危险事件的全局触发间隔。我按玩家平均游玩时长做了一个粗略公式事件间隔 700秒 / 当前区域风险等级。高等级区域大概每 7 到 10 分钟一次。生成种子驻留逻辑每次进入同一区域时已经生成的生物状态会被序列化保存下来不会因为重进游戏而重置。这是沉浸感的关键——玩家离开后又回来会发现之前标记过的生物还在同一个地方干它们自己的事。4.3 环境叙事让星球本身成为一本可以读的书Alien_Quest_v101 里没有任何文字剧情文本但整个星球到处都藏着叙事碎片。比如某些环形形态的巨型结构表面布满规则的凹槽。玩家扫描后会发现凹槽间距跟当地某几种生物的活动节律完全同步于是就会产生一个推论这不是单纯的地质结构而可能是某种高度社会化的生物长期活动留下的痕迹。再比如地下水系区域的特殊矿物质沉积带其分布模式与地表植被的根系网络高度吻合暗示着这颗星球可能曾经存在过一套规模宏大的地表—地下联合生态系统。这些线索在设计上遵循一条原则只呈现现象不解释机制。玩家的探索本能在看到不合理的现象时会自动启动他们会忍不住去寻找到底什么导致了这种关联。我在界面上不加任何“线索追踪”或“关联图”让玩家靠自己的记录和记忆在大脑里拼图。测试中有一个让我印象很深的场景有玩家在论坛上把两个毫无直接联系的区域线索拼到一起推测出“这颗星球上可能存在一种深层的共生网络”而且他的推测和我在设计文档里写的背景设定完全一致。那一刻我才确信纯环境叙事是可行的。5. 技术选型回顾Godot引擎下的GDScript方案和性能取舍5.1 为什么选了Godot而不是Unity或者Unreal很多做科幻题材的独立游戏开发者第一反应会选Unity毕竟资产商店资源多、教程多、有大量现成的科幻素材包。Alien_Quest_v101 最开始也是基于Unity原型跑的但做到生物生成系统时我换到了Godot。核心原因有三条。第一我的游戏是2D俯视角没有复杂的3D光照烘焙需求Godot的2D渲染管线和光照系统完全够用而且性能开销小得多。第二GDScript的脚本编写速度对快速迭代特别友好——我可以在运行时改脚本然后立刻看到效果不用像C#那样每次都要完整编译虽然Unity有增量编译但大工程下等待时间依然明显。第三Godot的场景树结构让我能很自然地用“节点组合”的方式搭建生物个体每只生物就是一个场景实例不同行为模块就是挂在根节点下的子节点这在组织生成器代码时清爽很多。当然Godot也有代价第三方插件生态比Unity差一截尤其是程序化生成相关的高级插件基本不存在所有东西都得自己写。但这个项目的核心就是我自己写的生成器插件依赖本就不大所以这个代价可以接受。5.2 性能优化的几个实测数据v101 中单个地图区块的常驻对象数量大约在 600 到 900 之间其中一半是生物个体一半是环境交互点。最开始运行时帧率只有 30 帧上下经过四轮优化后稳定在 60 帧这里分享三个最有效的方案。第一个是 Instanced Drawing。我把所有形态模板相同的生物实例合并成一个Draw List每帧只提交一次绘制指令由GPU做实例化渲染。这个改动直接把生物绘制开销降了约 40%。第二个是行为更新降频。所有生物的逻辑更新不必每帧都跑我按生物与玩家的距离分了三档近距离 10 米内每帧更新中距离每 0.2 秒更新一次远距离每 1 秒更新一次。这样玩家视觉上感知不到区别但CPU的负载降幅非常显著。第三个是延迟加载的生态块。整个星球被切成 60x60 米的区块玩家周围的 3x3 个区块保持活跃其余区块只保留种子数据和上次离开时的序列化快照。这样开局加载时间从 8 秒降到了 2 秒而且内存占用稳定在 800MB 以内对于 2D 游戏来说属于偏保守的范畴。5.3 存档系统的一个稳妥设计方案探索类游戏的存档逻辑比战斗类游戏复杂得多——你不仅要记录玩家的坐标和物品还要记录大量生物个体的状态、环境事件节点的进度、玩家尚未发现的信息条目等等。v101 用了一种“分层快照事件日志”的方案。分层快照负责记录静态数据玩家所在区块 ID、货物列表、图鉴解锁进度、当前任务阶段。事件日志是一个增量队列记录玩家触发的每一次关键交互某生物的警戒等级变化、某区域的气体状态切换、某个环境事件是否已完成。存档时把这两部分合并成一个JSON文件每条日志带上时间戳这样既能完整恢复世界状态又能追溯玩家行为的时间线方便调试和后续做“探索回放”功能。这套方案的一个明显好处是容量可控。一次存档通常只有两三百KB但可恢复的状态精度远高于单纯保存坐标的做法。坏处是代码结构更复杂每次新增行为模块都要同步在事件系统中注册对应事件。我建议在做这个方案前先把事件系统的基础设施打好否则后期添加内容会比较痛苦。6. 跑完完整测试后最想告诉你的三个坑6.1 生态密度不是越高越好而是“可阅读性”越高越好这句话听起来像玄学但它是个实打实的设计问题。v101 早期版本里我在高植被区设置的生物密度偏高结果玩家反馈说“看不过来了”。后来我分析了一下问题出在“信息呈现速率”和“玩家信息处理能力”的匹配上。人类在探索类游戏里注意力分配的上限大概是同时处理 3 到 5 个独立特征。如果一个屏幕里出现了 8 种形态各异的生物玩家第一反应不是兴奋而是会自动把大部分信息过滤掉结果是所有生物都变成了“背景噪音”。修正方式是降低单位区域内的生物种类上限同时拉升每个生物之间的区分度。我设了一个硬性规则任意一个屏幕范围内的可见生物种类不超过 4 种超过的话生成器会自动调整个别生物的活跃状态让它们暂时隐藏到场景深处。这样玩家每次观察到的生物都能被明确地感知为“这一个”而不是“又一群”。6.2 过度拟合“探索感”会让玩家失去方向感这是我做的第二版测试里最明显的失败教训。当时我一味追求“没有任何引导”所有区域都长得过于相似也没有任何显眼的标识物。结果玩家的反馈从“自由”变成了“迷路”——这俩的差别在于自由是玩家知道自己在哪里、也知道自己要去哪只是路径没有被绑定迷路是玩家连“我在哪里”都不知道。解决方案是引入了“定向环境地标”系统。每个区域生成时会自动放置 1 到 2 个超高可见度的地标物比如一根突出地表的柱状矿物结构或者一片颜色对比度极高的特殊植被带。这些地标不承担任何任务功能只是让玩家在远距离就能确定自己的空间位置。加上这些地标之后玩家的方向焦虑大幅下降主动探索意愿反而提升了——因为知道自己能回来才敢走得更远。6.3 所见即所得的信息呈现比“酷炫界面”更稀缺最后想说的是UI设计上的一个认知转变。v101 初版的信息界面做得很丰满——扫描动画、粒子特效、渐入渐出的数据面板觉得这样才有“科幻感”。结果实际测试时发现玩家大量时间都在等动画播完而不是在看内容。后来我把界面推倒重来规则只有一条所有信息必须能在 1 秒内被读取。描述文字直接平铺显示分类标签用更简单的色块而非字体变化区分数据刷新不用动画过渡而用瞬切。改动之后玩家的信息获取效率提高了一个量级而且沉浸感反而增强了——因为玩家把时间花在思考信息含义上了而不是等待界面响应。做探索类游戏UI的最高评价不是“好看”而是“存在感低到让玩家以为自己在直接观察世界”。我个人做 v101 这段时间最大的体会是探索感是一个必须被主动设计的东西它不是地图大、内容多就会自然出现的。信息的呈现节奏、选择的真实分量、环境在玩家行动后的反馈三者缺一不可。目前这个版本已经在朋友小圈子内测过两轮下一步我会把生物图鉴的交互深度和区域事件连锁做得更复杂一些同时也想听听大家对“环境叙事”这个方向的反馈。如果你也在做类似题材欢迎留言交流。

相关推荐

开源办公套件Univer实战:用TypeScript与Canvas构建Web在线表格
开源办公套件Univer实战:用TypeScript与Canvas构建Web在线表格

如果你在做 Web 项目时,最头疼的不是业务逻辑,而是甲方突然甩来一句“这里要能在线编辑 Excel”,那你大概率会撞上这个开源项目——univer。简单说,univer 是一套基于 TypeScript 的 Web 办公套件渲染与交互框架,它能让… · 2026/9/25 7:23:01

Substrate 区块链开发框架入门:从架构原理到自定义 Pallet 实操
Substrate 区块链开发框架入门:从架构原理到自定义 Pallet 实操

1. 从零认识 Substrate:它到底是什么,能解决什么问题第一次听到 Substrate 这个词,很多人会以为是某个前端框架或者构建工具。其实不是。Substrate 是一个用于构建区块链的开发框架,由 Parity Technologies 团队推出,最… · 2026/9/25 7:22:55

Substrate框架模块化设计与Runtime开发实战指南
Substrate框架模块化设计与Runtime开发实战指南

1. 从“substrate”这个词说起:它到底指什么第一次看到“substrate”这个词,很多人会愣一下。它在不同圈子里指向完全不同的东西:做区块链的人第一反应是 Parity 那套区块链开发框架,做材料科学的人想到的是“衬底”“基底”&… · 2026/9/25 7:22:55

深度拆解iMessage附件后门及辅助模块的完整分析链路
深度拆解iMessage附件后门及辅助模块的完整分析链路

我最早接触“三角测量”(Triangulation)这个代号,是在处理一部iPhone异常发热、流量飙升的排查任务里。查了一整天日志,最后在一个不显眼的iMessage消息附件目录里翻出了一个伪装成图片的二进制文件,当时就觉得不对劲。… · 2026/9/25 7:54:22

酷狗KGG文件解密原理与六种实操方法详解
酷狗KGG文件解密原理与六种实操方法详解

1. 这不是“破解”,而是对本地音频文件格式的合规技术解析酷狗音乐的.kgg和.kgm文件,本质上是经过封装加密的音频容器,不是传统意义上的“盗版保护”或“DRM版权锁”,而是一种客户端级的资源打包机制——它把原始音频(… · 2026/9/25 7:54:22

Atlas 300V 24G部署YOLO全流程:从推理加速卡到模型优化
Atlas 300V 24G部署YOLO全流程:从推理加速卡到模型优化

1. 从热搜问题说起:Atlas 300V 24G到底是不是运算加速卡最近好几个群都在讨论Atlas 300V 24G,问的最多的就是“这玩意是不是运算加速卡”。我先直接给结论:是加速卡,但准确点说,它是AI推理加速卡,不是训练卡… · 2026/9/25 7:54:16

Atlas 300V 24G运算加速卡深度解析:从NPU原理到YOLO推理部署实战
Atlas 300V 24G运算加速卡深度解析:从NPU原理到YOLO推理部署实战

项目群里又有人问起:“Atlas 300V 24G这卡到底算不算运算加速卡?是不是拿回来插上就能像显卡一样跑YOLO?”这个问题我太熟悉了,几乎每隔一段时间就会看到一次。坦白讲,我第一次拿到Atlas 300V Pro 24G的时候&#xff0… · 2026/9/25 7:54:16

SKILL.md 实战:用自然语言文档驱动 Agent 技能开发与 OpenClaw 落地
SKILL.md 实战:用自然语言文档驱动 Agent 技能开发与 OpenClaw 落地

1. 从手搓 Agent 到 SKILL.md:一场开发范式的转移过去大半年,我几乎把市面上能见到的 Agent 框架都折腾了一遍。从最早的 ReAct 循环手写 prompt,到后来用各种编排框架搭工作流,再到接入 MCP 协议打通外部工具,每一步都… · 2026/9/25 7:54:16

大屏数据看板PPT模板改造:数据接入与避坑实战
大屏数据看板PPT模板改造:数据接入与避坑实战

简介:这份幻灯片模板专用于制作大屏可视化数据分析看板,面向产品运营、市场销售、财务分析等需要做数据汇报的职场人士,也适合中高层管理者用于经营复盘与项目展示,可快速生成清晰直观的大屏展示页面。压缩包内仅有一个演示文稿文… · 2026/9/25 7:54:15

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码