Unity混合现实开发入门:从环境搭建到首个MR项目构建
1. 项目概述为什么选择Unity开启混合现实之旅如果你对混合现实Mixed Reality MR感兴趣想自己动手创造一个虚实结合的世界那么Unity几乎是绕不开的起点。它不仅仅是一个游戏引擎更是目前构建MR体验最强大、最主流的平台。我刚开始接触MR时也尝试过其他工具但最终都回到了Unity原因很简单生态成熟、资源丰富、社区活跃。无论是微软的HoloLens、Meta的Quest系列还是苹果的Vision Pro官方都提供了对Unity的深度支持。这意味着你在Unity里学到的技能和积累的项目可以相对平滑地迁移到不同的硬件平台上这对于开发者来说是巨大的价值。这个指南的目标就是帮你从零开始跨越“安装”和“第一个项目”这两个看似简单、实则可能埋着不少坑的初始阶段。我会结合自己踩过的坑和积累的经验带你完成Unity编辑器的安装、配置并搭建一个能跑起来的、最基础的MR项目框架。这不仅仅是点击“下一步”的安装更重要的是理解每一步背后的逻辑以及为后续开发打好基础的关键设置。无论你是学生、跨界开发者还是对新技术充满好奇的爱好者跟着这篇指南走一遍你就能拥有一个属于自己的、干净的MR开发起点。2. 环境准备安装Unity编辑器的核心要点与避坑指南安装Unity听起来简单但如果你只是无脑点击“下一步”很可能会遇到版本不兼容、模块缺失、路径混乱等一系列问题后期解决起来非常麻烦。因此在下载安装程序之前我们需要先做好规划。2.1 版本选择在稳定与新特性之间找到平衡Unity的版本迭代很快长期支持版LTS和最新技术预览版Tech Stream并存。对于MR开发我的建议是优先选择最新的稳定LTS版本。为什么是LTSLTS版本经过长期测试bug相对较少第三方插件和资产商店的资源兼容性最好。MR开发本身涉及复杂的硬件交互和空间计算一个稳定的引擎基础至关重要。最新的技术预览版可能包含炫酷的新功能比如对Apple Vision Pro最新SDK的支持可能会先在预览版中提供但同时也伴随着未知的风险和不稳定性不适合新手入门和项目初期搭建。如何查看MR相关支持访问Unity官方博客或MR设备厂商的开发者网站如Microsoft Mixed Reality、Meta for Developers通常会明确指出推荐或已验证的Unity版本。例如开发HoloLens 2应用微软通常会推荐某个特定的Unity LTS版本及对应的MRTKMixed Reality Toolkit版本。注意不要盲目追求“最新”。我曾在一个项目初期使用了当时最新的非LTS版结果在项目中期遇到一个引擎级别的渲染bug导致所有透视效果异常最后不得不花了一周时间将整个项目降级到LTS版痛苦不堪。2.2 通过Unity Hub进行安装与管理Unity Hub是官方提供的管理工具用于安装、管理和启动不同版本的Unity编辑器以及项目。务必使用Hub进行安装这能让你的开发环境井井有条。下载与安装Unity Hub从Unity官网下载Hub安装程序。安装路径建议放在非系统盘如D:\UnityHub避免占用C盘空间。登录账号启动Hub后使用Unity账号登录。没有账号需要注册一个这是使用Unity服务包括某些许可证所必需的。安装编辑器在“安装”标签页点击“安装编辑器”。这里你会看到版本列表。找到你之前决定好的LTS版本例如2022.3.x LTS点击“安装”。选择模块最关键的一步在弹出的模块选择界面除了默认的编辑器组件必须根据你的目标平台添加相应的模块。通用基础Microsoft Visual Studio Community或Visual Studio Code—— 这是代码编辑器Unity开发必备。针对Android如Meta Quest必须勾选Android Build Support并且在其子项中勾选OpenJDK和Android SDK NDK Tools。Unity会帮你安装这些繁琐的环境。针对Windows如HoloLens必须勾选Windows Build Support和Universal Windows Platform Build Support。针对iOS如未来支持Vision Pro需要iOS Build Support但这通常要求在macOS系统上操作。语言包建议勾选简体中文但代码和核心界面保持英文有助于排查全球性的错误信息。将模块选择总结如下表方便你核对目标平台必须安装的模块说明通用所有平台Unity Editor, Microsoft Visual Studio编辑器核心与代码IDEMeta Quest (Android)Android Build Support (含OpenJDK, SDKNDK)编译APK文件必备环境HoloLens (UWP)Windows Build Support, Universal Windows Platform Build Support编译UWP应用包必备管理便利简体中文语言包可选降低编辑器界面理解难度实操心得即使你目前只开发一个平台我也建议把其他主要平台的构建模块也装上。因为MR项目后期可能会考虑多平台发布提前装好可以避免未来重新运行安装程序节省大量时间。安装过程比较耗时特别是下载Android SDK请确保网络通畅。2.3 许可证激活与个人版选择安装完成后在Hub中启动该版本Unity编辑器。首次启动会要求你激活许可证。对于个人学习者、小团队或年收入/融资额低于一定门槛的开发者选择“Personal”个人版即可它是完全免费的功能上没有限制。只有当你或你的公司商业收入超过阈值时才需要升级为Plus或Pro版。激活过程在线完成即可。3. 创建首个混合现实项目从模板到基础框架安装好Unity后我们不要急于从完全空白的场景开始。对于MR项目使用正确的模板和初始设置能事半功倍。3.1 项目创建与模板解析在Unity Hub的“项目”标签页点击“新建项目”。这里你会看到很多模板如3D、2D、URP等。对于混合现实开发核心选择选择3D (Core)模板。这是最通用、最干净的起点。不要选择URP或HDRP模板除非你非常清楚你的目标MR设备对渲染管线的要求例如一些设备可能官方推荐URP。从Core开始兼容性最好。项目命名与路径给你的项目起一个清晰的英文名例如MyFirstMRApp。路径绝对不要包含中文或特殊字符最好放在一个简单的英文路径下如D:\UnityProjects\。这是很多“诡异”错误的根源。版本控制考虑如果你计划使用Git强烈推荐可以在创建时暂时不关联我们后续再设置。但路径规范是为版本控制做准备的好习惯。点击“创建项目”Unity会初始化并打开编辑器。3.2 初始场景设置为MR体验奠定基础打开后的默认场景有一个主摄像机和一个平行光。对于MR应用我们需要对这个基础场景进行“大扫除”和重构。清空与保存场景在“Hierarchy”窗口删除Main Camera和Directional Light。然后点击菜单栏File - Save As将当前空场景保存到项目的Scenes文件夹下命名为Main。养成随时保存场景的好习惯。设置XR插件管理这是让Unity项目变身MR项目的关键一步。点击菜单栏Edit - Project Settings打开项目设置窗口。在左侧列表中选择XR Plug-in Management。在右侧你会看到不同的平台标签页如Windows、Android。根据你的目标设备勾选对应的插件。开发Meta Quest切换到Android标签页勾选OpenXR目前Meta官方推荐或Oculus。勾选后Unity可能会提示你安装相关的插件支持包确认安装即可。开发HoloLens切换到Windows标签页勾选Windows Mixed Reality或OpenXR同样遵循微软当前官方推荐。勾选后通常下方会有额外的配置选项对于初次搭建可以先保持默认。创建XR场景原点RigMR体验中需要一个代表用户头部摄像机和手部控制器的对象。我们不需要从零开始创建。在“Hierarchy”窗口右键选择XR - Device-based - XR Origin (Action-based)。我推荐使用Action-based的版本因为它使用了Unity新的输入系统更灵活、更面向未来。这个操作会在场景中创建一个名为XR Origin的游戏对象。它下面包含Camera Offset: 摄像机的高度偏移用于调整眼高。Main Camera: 主摄像机其位置会由XR运行时驱动代表用户的头部。LeftHand Controller/RightHand Controller: 左右手控制器的视觉模型可能需要手动分配。配置输入动作关键但易错Action-based XR Origin依赖一个“Input Action Asset”文件来定义所有输入如手柄按钮、手势。在Project窗口右键Create - Input Actions命名为XRInputActions。双击这个文件打开输入动作编辑器。这里你可以定义各种“动作”如“Grip”握持、“Trigger”扳机、“Menu”菜单按钮、“Primary Button”A/X键等。对于第一个项目我们可以先使用默认配置或导入一个预设。更简单的方法在Unity Asset Store或MR设备厂商的SDK包中通常提供了预配置好的输入动作文件。例如安装MRTKMixed Reality Toolkit后它会自带完善的输入配置。作为起步你可以暂时跳过深度配置确保XR Origin上Input Action Manager组件引用了你创建的XRInputActions文件即可。添加基础交互与视觉反馈为了让场景不只是一个“观看”的体验我们添加一个最简单的可交互物体。在“Hierarchy”中右键创建一个3D Cube3D Object - Cube将其位置设为(0, 0.5, 2)让它悬浮在用户前方。我们需要让这个Cube能被XR射线交互。为Cube添加一个XR Simple Interactable组件如果找不到可能需要先安装XR Interaction Toolkit包。然后在XR Origin下的LeftHand Controller和RightHand Controller对象上确保存在XR Ray Interactor组件。这个组件会从控制器发射出一条射线。建立连接选中LeftHand Controller在XR Ray Interactor组件的Interactables事件列表里点击号将场景中的Cube对象拖入。选择事件类型为Hover Entered然后点击右下角的小齿轮选择Cube - MeshRenderer - Material材质将一个高亮材质如红色赋值给它。对RightHand Controller做同样操作。这样当用户用手柄射线指向Cube时Cube就会变色提供基础的视觉反馈。4. 构建与部署让项目在设备上运行起来场景搭建好了但只有在真实的MR设备上运行才能获得完整的体验。构建过程是另一个容易卡住新手的环节。4.1 针对Android (Meta Quest) 的构建设置切换平台点击菜单栏File - Build Settings。在平台列表中选择Android然后点击Switch Platform。这个过程会重新编译项目资源以适应Android需要一些时间。Player Settings关键配置点击Build Settings窗口中的Player Settings按钮会打开Project Settings的Player部分。Company Name和Product Name设置你的应用名称。Default Orientation设置为Landscape LeftQuest应用通常是横屏。Minimum API Level根据Quest系统要求设置通常至少Android 10.0 (API level 29)。Target API Level选择可用的最高稳定版本。最重要的在XR Settings部分可能需要展开Other Settings找到确保Virtual Reality Supported被勾选并且在Virtual Reality SDKs列表中添加Oculus或OpenXR。Graphics APIs通常只保留Vulkan。Quest对Vulkan支持更好性能更高。连接设备与构建用USB-C数据线将Quest设备连接到电脑。在设备内确认启用开发者模式需要在手机App中为设备开启开发者模式然后在设备内“设置”-“系统”-“开发者”中打开。在Unity的Build Settings中点击Build And Run。选择一个输出文件夹并命名APK文件如MyFirstMRApp.apk。Unity将开始编译并自动将APK安装到已连接的Quest设备上运行。4.2 针对Windows (HoloLens) 的构建设置切换平台在Build Settings中选择Universal Windows Platform点击Switch Platform。Player Settings关键配置Product Name等基础信息同上。Target Device选择HoloLens。Architecture选择ARM64HoloLens 2是ARM架构。Build TypeD3D Project。Target SDK Version选择最新的可用版本如10.0.22621.0。Minimum Platform Version根据需求选择。同样在XR Settings中确保Windows Mixed Reality或OpenXR被支持。生成Visual Studio工程与部署在Build Settings中点击Build选择一个空文件夹作为输出目录。Unity会生成一个Visual Studio解决方案.sln文件。用Visual Studio打开这个.sln文件。在顶部工具栏将解决方案配置设置为Release平台设置为ARM64。将HoloLens设备与电脑置于同一局域网或通过USB连接。在VS中将目标设备设置为Device并输入设备的IP地址或HoloLens 2 USB Device。点击调试 - 开始执行不调试或按CtrlF5VS会将应用打包并部署到HoloLens上运行。5. 常见问题与排查技巧实录即使按照步骤操作第一次搭建MR项目也难免遇到问题。这里记录了几个最常见的问题和解决方法。5.1 构建失败缺失SDK、JDK或NDK问题描述在构建Android项目时控制台报错提示找不到Android SDK、JDK或NDK路径。排查步骤打开Edit - PreferencesWindows或Unity - PreferencesMac。选择External Tools。查看Android部分。如果SDK、JDK、NDK的路径是空的或显示为红色说明安装时未正确配置或路径丢失。解决方案自动安装最稳妥的方法是回到Unity Hub在你已安装的编辑器版本上点击右侧的三个点选择Add modules重新勾选Android Build Support及其子组件让Hub帮你重新安装和配置。手动指定如果你已通过其他途径如Android Studio安装了这些组件可以在这里手动指定其路径。但自动安装的兼容性通常更好。5.2 XR插件初始化失败或设备未连接问题描述在编辑器中点击播放或者应用在设备上启动后摄像机没有响应头盔的移动控制台可能有“XR failed to initialize”之类的错误。排查步骤确认插件管理再次检查Project Settings - XR Plug-in Management确保目标平台Android/Windows的插件已正确勾选。检查Player Settings确认Player Settings - XR Settings中已启用VR支持并添加了正确的SDK。设备连接状态Quest确保USB线连接正常设备已开启开发者模式并在连接时点击了头盔内的“允许USB调试”弹窗。可以尝试使用adb devices命令需安装Android Platform Tools查看设备是否被识别。HoloLens确保设备与开发机在同一网络且设备的“开发者模式”和“设备门户”已开启。在VS部署时确认IP地址正确。输入系统冲突如果你同时安装了旧的Unity Input Manager和新的Input System Package可能会产生冲突。建议在Project Settings - Player - Other Settings - Configuration中将Active Input Handling设置为Input System Package (New)。5.3 编辑器播放模式下的模拟测试在开发初期我们不可能每次都构建到真机测试。Unity提供了在编辑器内模拟XR输入的功能非常有用。打开模拟器窗口点击菜单栏Window - XR - XR Device Simulator。配置模拟器在打开的面板中你可以看到一个人形图标和手柄图标。确保XR Origin使用的是Action-based的输入系统。模拟操作在Game视图点击播放。你可以用鼠标和键盘来模拟头盔和手柄鼠标右键拖动模拟头部环顾。WASD键模拟在空间中的移动需配置。模拟手柄在XR Device Simulator窗口你可以直接点击和拖动手柄的按钮和摇杆这些操作会映射到你的输入动作上从而驱动场景中的交互如之前设置的射线高亮。善用这个模拟器可以快速迭代和调试交互逻辑而无需频繁连接设备。5.4 性能问题初现与优化意识即使在第一个简单项目中也需要建立性能意识。MR应用对帧率通常要求72fps或90fps和功耗极其敏感。查看Stats面板在Game视图左上角点击Stats按钮。重点关注FPS帧率。应稳定在设备刷新率以上。CPU/GPU主线程和渲染线程的耗时。如果某一项长期很高如10ms就是瓶颈。Batches/SetPass Calls绘制调用次数。次数过多会严重影响GPU性能。我们场景中只有一个Cube这个值会很低但未来模型复杂后需要通过各种方式静态合批、GPU Instancing、简化材质来降低它。第一个优化习惯为你创建的Cube创建一个简单的材质而不是使用默认的粉色材质。在Project窗口创建材质为其分配一个简单的无光照着色器如Unlit/Color这能减少一个光照计算的开销。对于MR中许多不依赖复杂光照的UI或指示性物体使用无光照着色器是常见的优化手段。

相关新闻

AI自动生成PPT工具全解析与实战指南

AI自动生成PPT工具全解析与实战指南

1. AI自动生成PPT的核心价值解析第一次看到AI能自动生成PPT还带配图和文字调整时,我的反应和标题一样——"好家伙"。这确实解决了职场人士最头疼的三大痛点:找模板耗时、配图费神、排版纠结。根据我帮企业做数字化培训的经验,普通员…

2026/10/10 23:09:29 阅读更多 →
深度学习张量操作指南:从基础到实战

深度学习张量操作指南:从基础到实战

1. 张量计算基础:从零理解多维数组操作在深度学习领域,张量(Tensor)是最基础的数据结构,它本质上是一个多维数组。理解张量操作是掌握深度学习编程的第一步。想象张量就像俄罗斯套娃,一维张量是向量&#x…

2026/10/2 1:11:22 阅读更多 →
Redis 五大数据类型精讲(String 字符串)

Redis 五大数据类型精讲(String 字符串)

一、String 类型介绍String 是 Redis 最基础、最常用的数据类型,是二进制安全的,可存储字符串、数字、二进制数据,最大支持 512MB 单值存储。底层为动态字符串结构,支持自动扩容,读写性能极高。二、核心常用命令1. 基础…

2026/10/11 3:18:37 阅读更多 →

最新新闻

7天6462★、HN冲到第8:Rust版Photoshop一夜刷屏,“Adobe套件被偷家“的剧情真的来了

7天6462★、HN冲到第8:Rust版Photoshop一夜刷屏,“Adobe套件被偷家“的剧情真的来了

7天6462★、HN冲到第8:Rust版Photoshop一夜刷屏,"Adobe套件被偷家"的剧情真的来了 【免费下载链接】photocraft An open-source, clean-room reimplementation of Adobe Photoshop in pure Rust 项目地址: https://gitcode.com/gh_mirrors/p…

2026/10/12 0:35:17 阅读更多 →
Cursor 无限续杯新思路:用 TaoToken 统一 Key 打通 cursor-free-vip 下载与使用

Cursor 无限续杯新思路:用 TaoToken 统一 Key 打通 cursor-free-vip 下载与使用

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

2026/10/12 0:35:17 阅读更多 →
Infernux 着色模型与 GLSL 实战:打造 PBR、卡通与自定义光照

Infernux 着色模型与 GLSL 实战:打造 PBR、卡通与自定义光照

游戏开发图形学3D渲染 【免费下载链接】Infernux Building a Neural Network-Native Engine (3N). Python authoring, C runtime, Vulkan/WebGPU. Windows, Linux, Android and Web. 项目地址: https://gitcode.com/gh_mirrors/in/Infernux 点击查看 免费下载 Infe…

2026/10/12 0:35:17 阅读更多 →
陈德炼:做 B2B 垂直 AI,第一性任务是变成客户的同类|TaoToken 统一 Key 打通 LLM 与 RPA 落地

陈德炼:做 B2B 垂直 AI,第一性任务是变成客户的同类|TaoToken 统一 Key 打通 LLM 与 RPA 落地

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

2026/10/12 0:35:17 阅读更多 →
从 OpenClaw 到 Hermes:会自己长大的 AI 代理,TaoToken 统一 Key 怎么接

从 OpenClaw 到 Hermes:会自己长大的 AI 代理,TaoToken 统一 Key 怎么接

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

2026/10/12 0:35:17 阅读更多 →
VMware NAT模式虚拟机端口转发到宿主机:两种配置方法与排查指南

VMware NAT模式虚拟机端口转发到宿主机:两种配置方法与排查指南

1. 先把这张网络拓扑图看明白:这个需求到底在解决什么问题先说结论:你要做的事情,就是把一台运行在VMware NAT网络里的虚拟机,它的9980端口“搬”到宿主机上,让局域网里其他电脑通过访问宿主机IP就能用上这个端口背后的…

2026/10/12 0:34:17 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →