
性能优化
文章平均质量分 87
你一身傲骨怎能输
大家好,我是傲骨,一名热爱游戏开发的程序员,主要是游戏客户端研发方向。
我拥有计算机科学和应用数学学士学位,并在游戏行业工作了超过10年,专注于使用Unity和C#进行游戏开发。我参与过多个独立游戏项目,从概念设计到发布,积累了丰富的实践经验。
我会定期分享相关技术经验供大家学习和参考,已有的博客文章也会随着时间而逐渐更新与优化,我会尽量将每一篇文章写写满干货,让大家能阅读后有所收获,鉴于本人还在公司工作暂时不开启交流群,后期会逐渐开启交流群并且研发一些作品展示实战效果。对于一些购买我的技术专栏的表示感谢,感谢您的支持,一些专栏的文章会跟进公司项目实战经验不断的优化和更新,同时会替换掉烂文。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Unity3D性能采集优化全攻略
《Unity3D游戏性能数据采集指南》摘要:本文介绍了Unity3D游戏性能数据采集的核心方法,包括帧率、内存、CPU/GPU占用等关键指标。详细讲解了使用Unity内置工具(Profiler、Frame Debugger、Memory Profiler)、自定义脚本(如FPS和内存日志)以及第三方工具(Xcode Instruments、RenderDoc等)的具体操作。提供了数据采集的完整流程建议,从开发阶段实时监控到上线后玩家设备数据分析。最后附上实用的自定义性能采集脚本示例和官方文档参考,帮助开发者原创 2025-07-31 14:59:51 · 928 阅读 · 0 评论 -
Unity遮挡剔除文件过大优化技巧
摘要: Unity遮挡剔除(.occlusion)文件过大的原因包括场景体积大、烘焙参数过细、Static物体过多及烘焙范围过大。优化方法:合理调整Smallest Occluder等参数精度,限定Occlusion Area烘焙范围,精简Static物体标记,分块烘焙大场景,并降低体素分辨率。避免所有物体设为Static或追求过高精度,需权衡性能与数据量。通过参数调优(如Smallest Occluder设为2)和脚本批量处理Static标记,可有效减小文件体积。适用于复杂室内场景,开放世界建议选择性开启原创 2024-12-04 03:28:03 · 1074 阅读 · 0 评论 -
Unity遮挡剔除全流程解析
Unity遮挡剔除(Occlusion Culling)是一种优化渲染性能的技术,通过只渲染可见物体来减少Draw Call和GPU负载。设置流程包括:1)标记静态物体为遮挡体/被遮挡体;2)在Occlusion Culling窗口调整参数(如最小遮挡体尺寸);3)烘焙生成遮挡数据;4)通过可视化工具调试效果。适用于室内、城市等有大量遮挡物的场景,但需注意动态物体不参与剔除、遮挡体尺寸限制等问题。优化建议包括合理划分遮挡体、结合LOD技术、分区烘焙等。最终需通过Profiler测试性能提升效果。原创 2024-12-16 22:15:50 · 1332 阅读 · 0 评论 -
Unity粒子特效优化终极指南
本文总结了粒子特效优化的关键建议,主要包括:控制屏幕粒子总数不超过200,单个发射器粒子数少于50;减小粒子尺寸,小粒子去除Alpha通道以提升性能;关闭不必要的碰撞、光照等功能;通过材质复用、图集合并降低DrawCall;利用LOD和距离裁剪优化远处粒子。建议使用Unity分析工具监控性能,在保证视觉效果的前提下实现低DrawCall、低Overdraw和低CPU/GPU消耗的优化目标。原创 2024-12-09 02:50:37 · 1403 阅读 · 0 评论 -
Unity弃用System.Xml改用Mono.Xml的五大理由
System.Xml 和 Mono.Xml 是Unity中常用的XML处理方案,但存在显著差异。System.Xml功能强大,支持高级特性(如XPath、XSLT),但体积庞大,会连带引入其他程序集,导致包体和内存膨胀。Mono.Xml是轻量级解析库,仅支持基础功能,但代码量极小,适合对性能敏感的场景。Unity打包时,引用System.Xml会将整个DLL打入包体,而Mono.Xml仅引入必要代码。建议移动端等性能敏感项目优先使用Mono.Xml处理简单XML数据,仅在需要高级功能时使用System.Xm原创 2024-12-08 03:57:58 · 1364 阅读 · 0 评论 -
Unity音频优化终极指南
Unity音频资源优化指南:通过合理选择格式(WAV、OGG/MP3)、压缩设置(Load Type、Compression Format)和采样率,有效降低内存占用和包体大小。关键策略包括按需加载(短音效Decompress on Load,BGM用Streaming)、音频复用(对象池管理AudioSource)、平台适配(移动端优先OGG)以及性能监控(Profiler分析)。优化核心在于平衡音质与性能,实现高效音频管理。原创 2024-12-02 23:44:15 · 1549 阅读 · 0 评论 -
Unity游戏主角:1个材质和3个材质性能差异详解
摘要: 主角使用1个材质时仅产生1次Draw Call,性能最优但美术表现受限;使用3个材质则会增至3次Draw Call,虽提升灵活性和表现力,但性能开销更大。动态物体无法合批,材质数量与Draw Call呈线性关系。实际开发中需权衡性能与美术需求,通常将主角材质控制在1-3个。其他因素如Shader Pass数量、阴影等也会影响Draw Call。原创 2025-07-11 21:26:35 · 369 阅读 · 0 评论 -
游戏主角材质优化:1-3个最佳
游戏主角材质数量建议控制在1-3个,主要出于性能与美术表现的平衡考虑。从性能角度,材质数量直接影响Draw Call次数和合批优化效果;美术层面,合理分材质能实现不同部位的质感差异和换装特效需求。但单一材质会导致表现力受限、换装复杂、贴图资源紧张等问题,尤其难以兼顾多渲染模式。实际开发中,通常将身体、装备和特殊部位分开处理,既能保证性能优化,又可满足游戏表现需求。材质数量的取舍需根据项目性能目标和美术要求综合考量。原创 2025-07-11 21:23:39 · 243 阅读 · 0 评论 -
角色合并为1个SMR的7大限制
摘要(148字): 在3D角色开发中,单一SkinnedMeshRenderer(SMR)常因功能限制需拆分为多个SMR。典型场景包括:不同部件需分属独立渲染层/队列(如UI层武器或半透明披风);材质需求冲突(如身体不透明而披风透明);动态换装系统的高复杂度;特殊效果(描边、溶解)的独立实现;物理交互(布料、刚体)分离;资源复用与内存优化需求;以及独立动画控制(如武器与身体不同动画)。开发时需权衡性能与功能,优先合并非必要分离的部件,控制SMR数量并优化包围盒设置。原创 2025-07-11 21:20:13 · 446 阅读 · 0 评论 -
帧卡顿?vsync到来帧缓冲区未及时更新是元凶
摘要: jank(卡顿)或掉帧是指当屏幕的vsync信号到来时,帧缓冲区未及时更新新帧,导致屏幕重复显示上一帧内容,造成动画不流畅。vsync信号周期性触发(如60Hz屏幕每16.67ms一次),若应用未在间隔内完成渲染,就会导致丢帧或慢帧,表现为画面卡顿或跳跃。jank泛指此类动画不连贯现象,通常由渲染超时或帧跳过引起。原创 2024-10-10 04:39:06 · 1564 阅读 · 0 评论 -
VSync信号与Jank卡顿全解析
摘要:当屏幕刷新时(如60Hz每16.67ms的vsync信号),应用需在两个vsync周期内完成渲染并更新帧缓冲区。若未及时完成,屏幕会显示上一帧内容,导致丢帧和卡顿(jank)。优化方向包括减少主线程阻塞、优化绘制逻辑等,可使用Systrace或Instruments等工具检测性能问题。原创 2024-10-09 21:47:24 · 1945 阅读 · 0 评论 -
优化贴图带宽:提升性能的关键
摘要:GPU显存带宽是性能的关键瓶颈,尤其在贴图采样等密集数据操作中。降低带宽能显著提升帧率、减少功耗发热,并释放资源用于更高画质。由于硬件提升带宽成本高昂,可通过Mipmap、贴图压缩、采样优化等方法进行软件优化。总之,贴图带宽优化是GPU渲染的核心目标,能同时改善性能、功耗和视觉效果。(150字)原创 2025-07-09 02:56:56 · 218 阅读 · 0 评论 -
GPU骨骼数限制的真相与优化方案
GPU骨骼动画的骨骼数限制主要源于Uniform/Constant Buffer的容量限制和Shader资源约束。16KB的Buffer仅能支持约256个4x4骨骼矩阵,部分平台对数组长度也有上限。工程中可通过骨骼分批、Texture Buffer存储、Compute Shader计算或骨骼压缩等方法突破限制。主流引擎通常将最大骨骼数设为60-256,以平衡性能与兼容性。原创 2025-07-09 02:50:03 · 276 阅读 · 0 评论 -
移动设备为何功耗第一?
移动设备开发中,功耗是首要考量因素。电池容量有限,高功耗直接影响续航、导致设备发热并触发降频,损害用户体验和安全性。长期高功耗运行还会缩短设备寿命,并可能被系统限制或应用商店拒审。用户对耗电快、发热问题极其敏感,直接影响产品口碑和留存。因此,移动开发必须优先优化功耗,而非单纯追求高性能。主流厂商和游戏均采用多档省电模式,体现了"功耗优先"的行业共识。原创 2025-07-09 00:59:08 · 941 阅读 · 0 评论 -
手游高帧率却发热?5招降温优化方案
手游高帧率导致发热严重的问题可通过硬件和软件优化解决。核心原因包括帧率过高、无帧率限制、无效计算及渲染未优化等。优化建议:限制帧率至60fps或设备刷新率以下,开启垂直同步,采用动态分辨率/画质自适应,减少后台计算,优化渲染管线。测试工具推荐systrace、GPU Profiler等。代码示例提供Unity和UE4的帧率限制方法。关键要平衡帧率与发热,关注用户体验而非单纯追求高帧率。原创 2025-07-09 00:42:45 · 912 阅读 · 0 评论 -
手游GPU遮挡剔除优化全攻略
本文提出了一种基于GPU的粒子/特效高效遮挡剔除方案。其核心流程分为三步:首先预渲染主遮挡体到低分辨率深度Buffer;然后在粒子/特效的GPU计算阶段采样该Buffer进行深度比较,剔除被遮挡元素;最后仅渲染可见粒子。该方案通过Compute Shader或Vertex/Geometry Shader实现,支持大规模粒子系统优化,并建议采用低分辨率Buffer、分批处理和异步复用等策略提升性能。需注意深度精度、带宽消耗等实现细节。整体方案可显著减少无效渲染,提升图形性能。原创 2024-10-25 22:50:45 · 1240 阅读 · 0 评论 -
手游性能优化:光栅化buffer技术全解析
摘要: 光栅化buffer技术通过预渲染深度/遮挡等特定buffer,优化手游渲染性能。核心流程为:1)预渲染主遮挡体到离屏buffer(低分辨率优先);2)利用buffer在CPU/GPU端快速剔除被遮挡的粒子、UI等对象;3)主流程仅渲染可见内容。典型应用包括遮挡剔除、粒子裁剪、UI优化及后处理效果(如SSAO)。优化时需注意低精度误判、多视口兼容及移动端带宽限制,可通过低分辨率渲染、分区处理、硬件特性等手段提升效率。该技术显著减少无效DrawCall和填充压力,适用于大场景手游性能优化。(150字)原创 2024-10-14 22:38:28 · 1332 阅读 · 0 评论 -
屏幕占比剔除优化全流程详解
摘要:基于屏幕占比的剔除是一种优化渲染性能的策略,通过计算物体在屏幕上的投影面积决定是否渲染。核心流程包括:物体筛选→获取包围盒→投影变换→计算屏幕面积→阈值判断→剔除/恢复渲染。该技术适用于开放世界、特效优化等场景,可与LOD、距离剔除等策略结合。实现时需注意投影精度、包围盒更新、剔除频率等关键点,建议设置合理阈值并采用批量处理。主流引擎如Unity/Unreal均可通过脚本或内置系统实现,能有效减少DrawCall和像素填充压力。(149字)原创 2024-10-11 02:29:57 · 1527 阅读 · 0 评论 -
手游性能优化:Texture Atlas UV Index技术详解
Texture Atlas UV Index技术是一种将多个小纹理合并到一张大图集并通过UV坐标索引各自区域的方法。该技术通过减少材质切换、合批渲染和降低内存碎片显著提升渲染性能。其核心原理是重映射UV坐标,使每个对象能正确采样对应的小纹理区域。实际应用中分为静态合图(如UI)和动态合批(如角色换装),需注意图集尺寸限制、边缘溢出等问题。主流引擎如Unity、Unreal均支持此技术,它是手游性能优化的关键手段,能有效减少DrawCall,但需要合理管理图集和UV索引。原创 2024-10-10 02:35:18 · 1584 阅读 · 0 评论 -
手游性能优化:散热与降频的真相
手机散热控制是性能优化的关键。高温会导致SoC温度过高,触发系统温控机制强制降频,造成游戏卡顿、掉帧等问题,严重影响用户体验。由于手机体积有限,散热能力不足,优化手段包括降低渲染负载、控制帧率等,核心目的是减少发热,避免降频带来的性能损失。散热优化不仅关乎游戏流畅度,也影响设备寿命。原创 2024-10-09 21:16:22 · 2575 阅读 · 0 评论 -
5步精准优化Unity性能毛刺
Unity性能优化指南:如何定位和解决帧率毛刺问题 Profiler是定位Unity性能毛刺(帧耗时突增)的关键工具。当明确识别到毛刺原因(如GC、资源加载或特定脚本)后即可着手优化。优化前需确认毛刺规律性、影响范围及根本原因,建议采用定位-分析-优化-测试的流程。注意不要只看平均帧率,要关注帧时间曲线,针对性地解决影响最大的毛刺。合理使用Profiler配合代码分析,能有效提升游戏流畅度。原创 2025-07-08 20:10:33 · 461 阅读 · 0 评论 -
Unity手游帧率优化:定位CPU还是GPU瓶颈
Unity手游帧率优化流程摘要(142字) 帧率优化需先定位CPU/GPU瓶颈:1)用Profiler观察CPU Usage和GPU Usage耗时,或通过降分辨率辅助判断;2)CPU瓶颈优化脚本逻辑、物理计算、动画和DrawCall,GPU瓶颈则优化模型面数、贴图、Shader和特效;3)优化后回归测试并持续迭代。关键工具包括Unity Profiler、ADB和GPU分析工具。流程强调先精准定位再针对性优化,避免盲目调整。记住核心原则:数据驱动、分步验证、持续积累优化经验。原创 2025-07-08 20:05:32 · 1042 阅读 · 0 评论 -
业务代码如何优化分支预测性能
现代CPU通过分支预测器提前加载指令优化性能,但当分支走向无规律时(如if/else各50%),会导致分支失误,性能下降。常见于状态机、AI决策等场景。优化方法包括:1)让分支概率倾斜(如90%走if);2)用查表、位运算消除分支;3)数据分组批量处理;4)减少嵌套分支。例如角色动画状态机可按状态分组处理,粒子系统可分离活跃粒子。通过提高分支预测命中率,可显著提升性能。原创 2025-07-08 11:33:48 · 916 阅读 · 0 评论 -
高分辨率为何拉低GPU帧率?
摘要: GPU并行渲染能力虽强,但总算力和带宽有限。分辨率越高(如从1080p到4K),像素数量呈倍数增长(207万→830万),导致GPU需处理更多fragment着色、后处理等全屏操作,显存带宽压力也剧增。当像素总量超过GPU核心并行极限时,需分批调度,每帧耗时增加,帧率下降。关键瓶颈在于fragment shader执行次数、后处理计算量及显存带宽。通过性能分析工具可观察到,分辨率提升时GPU帧时间显著增加,而CPU耗时基本不变。原创 2024-06-12 21:34:26 · 1059 阅读 · 0 评论 -
Unity Profiler采样点存储机制揭秘
摘要:Unity Profiler采样点信息首先记录在本地线程缓冲区而非全局缓冲区。每个线程拥有独立的采样缓冲区(thread-local buffer),可实现无锁写入,避免多线程竞争,并保证时序正确。采样完成后,帧结束时所有线程缓冲区的数据会合并到全局帧缓冲区。这种设计兼顾了性能(减少锁竞争)和数据一致性,便于后续分析。相关实现通过C# API调用底层C++代码完成,采样数据最终用于性能分析和优化。原创 2024-05-06 21:42:14 · 2131 阅读 · 0 评论 -
揭秘Unity手机端如何自动连接编辑器Profiler
Unity手机端(Player)自动连接编辑器进行远程Profiler通信的机制:手机端通过UDP广播或mDNS自动发现编辑器IP和端口,建立TCP连接后传输性能数据。连接条件包括Development Build、开启Script Debugging/Profiler支持。若自动发现失败,可手动指定IP或通过Profiler窗口添加设备。核心流程为:发现服务→建立TCP连接→数据传输→断线重连。该功能为Unity内置实现,主要用于开发阶段的性能调试。原创 2025-07-02 02:45:51 · 363 阅读 · 0 评论 -
Unity远程Profiler通信条件
条件说明手机端连接IP必须是Unity编辑器所在电脑的局域网IP地址手机端连接端口必须是Unity Profiler监听的端口号网络环境手机和编辑器必须能互相访问该IP和端口。原创 2025-07-02 02:39:07 · 203 阅读 · 0 评论 -
Unity远程Profiler通信架构解密
Unity远程Profiler通信架构概述:该架构通过Profiler Agent(目标设备)和Profiler Server(编辑器端)实现跨平台性能数据采集与分析。核心流程包括建立连接、数据采集压缩(LZ4)、UDP/TCP传输(含校验重传)、解析展示及双向控制。采用序列化二进制包(带序号/校验码),支持实时监控CPU/GPU/内存等指标,但对网络质量和性能开销敏感,适用于开发测试环境。关键组件包括数据采集模块、网络协议层和可视化解析系统。原创 2025-07-02 02:33:34 · 770 阅读 · 0 评论 -
Unity Profiler架构深度解析
Unity Profiler 是 Unity 引擎内置的性能分析工具,其架构设计围绕数据采集、传输、存储和展示展开。核心模块包括:Instrumentation 负责在引擎各子系统插入采样点;Profiler Backend 以帧为单位收集整理数据;Profiler Data API 为前端提供统一访问接口;Profiler UI 可视化展示性能数据。架构支持本地与远程分析,通过环形缓冲区和采样树高效组织数据,并允许扩展自定义模块。典型实现包括 C#/C++ 的采样点插桩、多线程数据采集、以及支持缩放和交互原创 2025-07-02 02:07:23 · 422 阅读 · 0 评论 -
unity引擎如何实现游戏切后台运行后继续下载的功能
通过以上步骤,我们可以在 Unity 中实现游戏切后台运行后继续下载的功能。需要注意的是,不同平台对后台任务的支持和限制不同,可能需要根据具体平台进行相应的调整和优化。通过以上步骤,我们可以在 Unity 中实现游戏切后台运行后继续下载的功能。需要注意的是,不同平台对后台任务的支持和限制不同,可能需要根据具体平台进行相应的调整和优化。iOS:使用并配置 Xcode 项目。Android:使用或并配置 AndroidManifest.xml。原创 2024-10-30 05:02:05 · 1294 阅读 · 0 评论 -
VSS(Virtual Set Size,虚拟集大小)
虽然VSS没有一个固定的上限,但通过合理的内存管理和优化策略,可以有效防止应用程序的VSS超限,提升应用的稳定性和性能。持续监控内存使用情况,及时处理内存警告,并采用合适的内存优化策略,是确保应用在各种设备上稳定运行的关键。原创 2024-10-27 04:32:12 · 1108 阅读 · 0 评论 -
Unity动画改材质:快递员为何累坏?
合批:同包装的包裹一起送,省力。Animator改材质:包裹包装纸变了,不能合批,只能单独送。Draw Call变多:送快递次数暴增,CPU累坏。游戏卡顿:快递员太忙,送不过来,大家等得着急。错误做法:每个士兵都自己染衣服,快递员只能一件一件送,CPU累死。正确做法:士兵们穿同样的制服,只在出门时用“袖标”区分(MaterialPropertyBlock),快递员一次性送,CPU轻松。Animator动画导致材质变化无法合批。原创 2025-03-03 23:58:21 · 144 阅读 · 0 评论 -
Unity帧率揭秘:动画片与游戏的帧数奥秘
动画片中的“帧”是指每一张画面,而“帧率”则是每秒播放的画面数,例如24帧/秒。在Unity中,每渲染出一个完整的画面称为一帧,帧率则是每秒渲染的帧数,如60 FPS。Unity统计帧率的原理类似于数动画片每秒翻了多少张画,通过代码可以实时计算并显示帧率。帧率的高低直接影响游戏的流畅度,高帧率带来更好的玩家体验,低帧率则可能导致卡顿。开发者通过统计帧率和使用Profiler工具,可以监控和优化游戏性能,确保游戏运行流畅。帧率的“黄金标准”包括30 FPS、60 FPS和120 FPS/144 FPS,分别对原创 2024-10-05 21:25:42 · 501 阅读 · 0 评论 -
游戏主线程跑在CPU小核上的几个情况
确保游戏主线程在高性能核心上执行对于提升游戏的流畅度和用户体验至关重要。通过综合运用以上策略和方法,可以有效避免通过综合运用以下策略和方法,可以有效避免游戏主线程被操作系统分配到小核上执行任务,从而提升游戏的流畅度和用户体验。原创 2024-10-27 02:47:45 · 1549 阅读 · 0 评论 -
游戏场景管理:打造无缝畅游的虚拟世界
游戏场景管理就像运营一个大型主题公园:需要动态加载/卸载场景(开关游乐区)、合理分配资源(优化设施人力),并通过异步加载(提前准备)和进度条(减少等待)确保玩家体验流畅。核心目标是让玩家无缝切换场景,同时节省内存资源。常见应用包括开放世界动态区块加载、关卡切换和UI/游戏场景分离,最终实现高效稳定的游戏运行。原创 2024-03-29 18:22:49 · 1028 阅读 · 0 评论 -
Unity着色器编译全流程与优化指南
Unity着色器编译流程包括编写预处理、平台相关编译、优化链接及运行时执行,分为开发阶段、打包阶段和运行时三种编译时机。建议通过预编译变体、Shader预热和剔除无用变体来优化性能,避免运行时编译导致的卡顿。合理使用ShaderVariantCollection和工具辅助管理变体,能够有效减少包体大小并提升运行效率。原创 2024-03-04 21:56:50 · 2244 阅读 · 0 评论 -
Unity内存监测与优化全攻略
摘要:Unity内存监测方法包括使用内置Profiler实时查看内存分配、Memory Profiler包深度分析快照、Profiler API代码级监控,以及第三方工具如Rider和RenderDoc。关键技巧包括减少频繁分配、资源卸载、使用对象池和分析GC。这些工具和方法帮助开发者优化内存使用,避免泄漏,提升游戏性能。(150字)原创 2024-04-07 20:00:44 · 2776 阅读 · 0 评论 -
谈谈托管堆在 Unity 中的内存管理
托管堆在 Unity 中的内存管理是通过 Mono 的垃圾回收机制来实现的。理解托管堆的工作原理、对象的创建与销毁、以及垃圾回收的影响,对于优化游戏性能至关重要。托管内存的分配确实涉及到运行时环境向操作系统申请内存,但这个过程是由运行时环境自动管理的。开发者不需要直接与操作系统交互,而是通过高层次的语言特性(如new关键字)来创建对象。运行时环境负责处理内存的分配、管理和释放,从而简化了内存管理的复杂性,提高了开发效率和程序的安全性。原创 2025-03-07 00:45:42 · 667 阅读 · 0 评论 -
GPU Skinning反而比CPU Skinning占用更多内存的原因
GPU Skinning虽然节省了CPU,但由于每个Instance都要有一份独立的VBO(显存),加上Unity的实现细节和多缓冲机制,实际内存(尤其是显存)消耗反而可能比CPU Skinning更高。工程上要根据实际需求权衡使用。我们继续深入,详细分析Unity GPU Skinning的底层实现细节内存占用的具体来源,以及工程上如何优化GPU Skinning的内存和性能。最后也会补充一下不同平台下的Skinning差异。原创 2025-04-17 03:05:00 · 811 阅读 · 0 评论 -
如何支持游戏切后台运行后继续下载的能力
通过使用后台服务、持久化下载状态、处理系统限制和网络变化,可以实现游戏切后台后继续下载的能力。具体实现会因平台而异,需要根据目标平台的特性进行调整。好的,继续深入探讨如何在不同平台上实现游戏切后台后继续下载的能力。原创 2024-10-30 04:56:30 · 1780 阅读 · 0 评论