Unity URP材质动态修改:从属性联动机理到工程实践
1. 项目概述从“改不动”到“改得对”最近在社区和项目群里经常看到有朋友在Unity URPUniversal Render Pipeline里动态修改材质属性时踩坑。最常见的一个场景是想通过代码动态切换一个材质的混合模式Blend Mode或者渲染队列Render Queue结果发现改了_Surface属性画面要么没变化要么直接“黑掉”或者出现奇怪的渲染错误。更头疼的是有时候在编辑器里手动调好了一到运行时代码一改就全乱套了。如果你也遇到过“Unity材质球图层锁了怎么办”这种灵魂拷问那大概率不是图层锁了而是你没摸清URP材质球内部属性的“联动密码”。这个项目要解决的就是彻底拆解URP特别是内置的Lit Shader材质球背后那张复杂的属性关联网。很多人只知道改_Surface表面类型从Opaque不透明切换到Transparent透明却不知道这背后会自动触发一连串其他属性如_Blend_SrcBlend,_DstBlend,_ZWrite等的连锁变化。而用代码动态修改时如果只改其中一个就等于只拧动了复杂机器上的一个螺丝其他关联部件还停留在旧状态机器当然会出故障。我们的目标就是让你不仅知道每个“螺丝”在哪更理解它们之间的“传动关系”从而能写出正确、健壮的动态材质修改代码告别瞎试和玄学调试。2. URP Lit材质属性网络深度解析2.1 核心属性联动机制一张牵一发而动全身的网URP的Lit Shader不是一个简单的参数列表而是一个精心设计的状态机。其核心设计思想是提供少数几个高级别、语义化的“模式开关”如_Surface当这些开关改变时Shader内部或Unity材质Inspector会自动配置好一系列底层、具体的渲染管线指令。这种设计对美术和初级开发者友好但给需要动态控制的程序埋了坑。让我们以最经典的_Surface属性为例看看它背后改变了什么_Surface(表面类型)这是总开关。可选Opaque或Transparent。_Blend(混合开关)这是一个关联开关。当_Surface设为Transparent时_Blend会自动启用设为On。_SrcBlend,_DstBlend(混合因子)当_Blend为On时这两者的默认值会根据_AlphaClip透明度裁剪等状态自动设置。例如纯透明混合常用SrcAlpha和OneMinusSrcAlpha。_ZWrite(深度写入)对于Opaque物体默认开启On确保正确遮挡。对于Transparent物体默认关闭Off。这是关键透明物体通常不写入深度以避免排序问题但这也意味着动态切换时如果忘了改_ZWrite可能导致深度测试混乱。_RenderQueue(渲染队列)这个值也会根据_Surface和_AlphaClip自动偏移。例如不透明物体通常在Geometry队列~2000而透明物体在Transparent队列~3000。这个队列值决定了物体被绘制的顺序。注意在编辑器里你修改_SurfaceInspector面板会帮你同步更新上述所有关联属性。但通过Material.SetFloat或Material.SetInt等代码API修改时这个自动联动机制不会触发这就是代码修改后效果不对的根源。2.2 属性标识符Shader中真正的钥匙在代码中操作材质属性你需要知道正确的属性标识符名称Property Name。这些名称是定义在Shader文件中的不是你在Inspector里看到的友好标签。对于URP Lit Shader常用的关键属性标识符如下Inspector显示名Shader中属性标识符类型说明Surface Type_SurfaceFloat0.0 Opaque, 1.0 TransparentBlend Mode_BlendFloat0.0 Off, 1.0 OnSrc Blend_SrcBlendFloat混合源因子如 5 SrcAlphaDst Blend_DstBlendFloat混合目标因子如 10 OneMinusSrcAlphaDepth Write_ZWriteFloat0.0 Off, 1.0 OnDepth Test_ZTestFloat深度测试函数如 4 LEqualRender Queue_RenderQueueFloat渲染队列偏移值重要提示_RenderQueue这个属性在材质Inspector上并不直接显示为可输入字段它是内部管理的。但你仍然可以通过代码读取和设置它。直接设置材质的renderQueue属性material.renderQueue是更常见的做法但理解其与_Surface的关联依然重要。2.3 混合模式与渲染队列的隐藏逻辑“Blend Mode”在Inspector里可能是一个下拉菜单如Alpha, Premultiply, Additive, Multiply但这其实是一个“预设”系统。它本质上是一组预定义的_SrcBlend和_DstBlend值的组合。当你选择“Alpha Blend”时系统内部设置了_SrcBlend 5 (SrcAlpha),_DstBlend 10 (OneMinusSrcAlpha)。渲染队列Render Queue则决定了物体在帧中被绘制的顺序。URP内置的队列有Background (1000)最先绘制通常用于天空盒。Geometry (2000)默认的不透明物体队列。AlphaTest (2450)进行了透明度测试的物体即用了_AlphaClip的物体。Transparent (3000)在所有不透明物体之后绘制按从后到前的顺序。Overlay (4000)最后绘制用于UI、镜头光晕等。当_Surface从Opaque变Transparent材质的renderQueue会自动从Geometry范围跳到Transparent范围。如果你用代码只改了混合参数但没改队列一个本应半透明的物体可能在所有不透明物体之前就被绘制了结果会被不透明物体错误地遮挡。3. 动态修改属性的正确姿势与实操3.1 错误示范为什么只改_Surface会失败假设我们想将一个材质从“不透明”动态切换到“透明混合”。新手可能会这样写material.SetFloat(_Surface, 1.0f); // 设置为Transparent运行后很可能发现材质没有任何变透明的迹象或者出现了奇怪的渲染错误。原因如下_Blend可能还是Off值为0混合根本没有启用。_SrcBlend和_DstBlend可能还是Opaque状态下的值通常是One和Zero这不是正确的透明混合公式。_ZWrite可能还开着值为1导致深度信息写入干扰了后续透明物体的正确混合。材质的renderQueue可能还在2000左右绘制顺序不对。3.2 完整正确的属性组设置方法正确的做法是模拟编辑器切换_Surface时发生的所有关联操作。下面是一个将材质设置为标准“Alpha Blend”透明模式的完整方法// 将材质设置为透明混合模式 (Alpha Blend) void SetMaterialToTransparentBlend(Material material) { if (material null) return; // 1. 设置表面类型为透明 material.SetFloat(_Surface, 1.0f); // 1.0 代表 Transparent // 2. 启用混合 material.SetFloat(_Blend, 1.0f); // 1.0 代表 On // 3. 设置混合因子为经典的 Alpha Blend // SrcAlpha 5, OneMinusSrcAlpha 10 (这些是Unity内置的BlendMode枚举值) material.SetFloat(_SrcBlend, 5.0f); material.SetFloat(_DstBlend, 10.0f); // 4. 关闭深度写入这是透明物体的关键。 material.SetFloat(_ZWrite, 0.0f); // 5. 可选但推荐设置深度测试为 LEqual这是透明物体的常见设置 material.SetFloat(_ZTest, 4.0f); // 4 对应 UnityEngine.Rendering.CompareFunction.LessEqual // 6. 将渲染队列设置为透明队列 // 直接设置material.renderQueue更可靠也可以设置内部属性。 material.renderQueue (int)UnityEngine.Rendering.RenderQueue.Transparent; // 3000 // 7. 重要如果需要启用 Alpha 裁剪Alpha Clip这里以禁用为例 material.SetFloat(_AlphaClip, 0.0f); // 0.0 代表 Off // 8. 告诉材质它的关键字需要更新某些Shader变体依赖关键字 material.EnableKeyword(_SURFACE_TYPE_TRANSPARENT); material.DisableKeyword(_ALPHATEST_ON); // 因为我们没启用AlphaClip // 注意URP Lit Shader的关键字可能更复杂有时直接设置属性即可Shader会自动处理关键字。 // 最保险的做法是在设置完所有属性后调用 // material.shaderKeywords material.shaderKeywords; // 强制刷新慎用可能开销大 }相应地切换回不透明模式的方法void SetMaterialToOpaque(Material material) { if (material null) return; material.SetFloat(_Surface, 0.0f); // Opaque material.SetFloat(_Blend, 0.0f); // Off material.SetFloat(_SrcBlend, 1.0f); // One material.SetFloat(_DstBlend, 0.0f); // Zero material.SetFloat(_ZWrite, 1.0f); // On material.SetFloat(_ZTest, 4.0f); // LEqual (保持不变或根据需求) material.renderQueue (int)UnityEngine.Rendering.RenderQueue.Geometry; // 2000 material.SetFloat(_AlphaClip, 0.0f); material.DisableKeyword(_SURFACE_TYPE_TRANSPARENT); material.DisableKeyword(_ALPHATEST_ON); }3.3 封装与优化创建材质状态配置器在真实项目中频繁调用多个SetFloat和设置队列效率不高且容易出错。更好的做法是预先定义好几种常见的材质状态Preset并一次性应用。using UnityEngine; using UnityEngine.Rendering; public class MaterialStateConfigurator { public static void ApplyPreset(Material material, MaterialPreset preset) { if (material null) return; switch (preset) { case MaterialPreset.Opaque: ConfigureOpaque(material); break; case MaterialPreset.AlphaBlend: ConfigureAlphaBlend(material); break; case MaterialPreset.AlphaTest: ConfigureAlphaTest(material); break; case MaterialPreset.Additive: ConfigureAdditive(material); break; // ... 其他预设 } // 可选强制属性块更新如果材质使用PropertyBlock // material.SetPropertyBlock(null); } private static void ConfigureAlphaBlend(Material mat) { mat.SetFloat(_Surface, 1.0f); mat.SetFloat(_Blend, 1.0f); mat.SetFloat(_SrcBlend, (float)BlendMode.SrcAlpha); mat.SetFloat(_DstBlend, (float)BlendMode.OneMinusSrcAlpha); mat.SetFloat(_ZWrite, 0.0f); mat.renderQueue (int)RenderQueue.Transparent; // 处理Shader关键字 mat.EnableKeyword(_SURFACE_TYPE_TRANSPARENT); mat.DisableKeyword(_ALPHATEST_ON); mat.SetFloat(_AlphaClip, 0.0f); } // ... 其他Configure方法 } public enum MaterialPreset { Opaque, AlphaBlend, AlphaTest, Additive, Multiply }使用UnityEngine.Rendering.BlendMode等枚举可以使代码更易读。注意这些枚举值如BlendMode.SrcAlpha对应的整数值就是上面我们写的5。4. 实战陷阱与深度排查指南4.1 属性设置了却没生效检查Shader变体这是最让人困惑的问题之一。你确信代码执行了属性值也打印出来是对的但画面就是没变化。这可能是因为Shader变体Shader Variant在作祟。URP的Lit Shader使用Shader关键字Keywords来开启或关闭某些功能例如_SURFACE_TYPE_TRANSPARENT、_ALPHATEST_ON。当你修改_Surface等属性时Inspector会同时帮你管理这些关键字。但通过纯代码设置属性可能不会自动触发关键字的更新。解决方案显式管理关键字像上面代码示例一样在设置完属性后手动调用material.EnableKeyword()和material.DisableKeyword()。使用MaterialPropertyBlock对于需要频繁修改材质属性的物体如大量实例MaterialPropertyBlock是性能更优的选择。但需要注意MaterialPropertyBlock不能修改渲染队列renderQueue和全局关键字Global Keywords。它主要用于修改_Color、_MainTex_ST这类每实例数据。对于_Surface、_Blend这种改变渲染状态的属性直接修改Material实例更可靠或者为不同状态准备不同的材质实例。检查材质是否被实例化确保你修改的是正确的材质实例。renderer.material会创建一个新的实例而renderer.sharedMaterial修改的是共享资源。在运行时动态修改通常使用renderer.material来避免影响其他物体。4.2 渲染顺序诡异Render Queue的动态管理动态修改混合模式后物体的渲染顺序可能变得混乱。例如一个变为透明的物体如果它的renderQueue没有从Geometry~2000调整到Transparent~3000它会在所有真正的不透明物体之前渲染。由于它现在是透明混合且关闭了深度写入它会被后面渲染的不透明物体覆盖导致“看不见”或闪烁。更复杂的情况如果你的场景中有多个动态切换透明/不透明的物体它们之间的正确排序也是个挑战。透明物体之间应该按从后到前离相机从远到近的顺序绘制才能得到正确的混合效果。当你动态改变物体的渲染状态时Unity的动态批处理和排序逻辑可能会被打乱。应对策略手动设置renderQueue这是必须的。切换到透明状态时务必设置material.renderQueue 3000或更高。使用自定义渲染队列值如果多个透明物体需要特定顺序可以给它们分配30013002等不同的队列值。数值越大的越晚绘制在更前面。考虑使用独立的渲染通道对于极其复杂的透明物体管理可以考虑通过脚本控制它们的渲染顺序或者使用Camera.Render的RenderTarget和自定义绘制命令来精细控制。4.3 性能考量与最佳实践避免每帧修改SetFloat、EnableKeyword等操作有开销。尽量避免在Update中每帧修改材质的核心渲染状态如_Surface,_Blend。更好的模式是在状态改变时如角色进入隐身状态一次性切换整套属性。使用材质实例Material Instances如果同一个预制体Prefab有很多副本且需要独立的状态一定要使用material new Material(originalMaterial)或renderer.material来创建实例化材质避免所有副本共享状态。预创建状态材质对于已知的几种状态如正常、隐身、受伤高亮可以在资源加载时或Awake阶段就创建好对应的材质实例Opaque版、Transparent版等运行时只需切换Renderer.material的引用这比动态修改属性更高效、更稳定。PropertyBlock的适用场景MaterialPropertyBlock非常适合修改颜色、纹理偏移、浮点数等不影响渲染管线状态的属性且性能极佳。但对于_Surface、_ZWrite、renderQueue这种改变渲染管线状态的属性直接修改材质实例是更简单可靠的选择除非你对Shader和渲染管线有很深的理解。5. 高级技巧自定义Shader与属性联动理解了URP Lit的原理后你可以将这些知识应用到自己的自定义Shader中。在你的ShaderGraph或手写Shader中你也可以建立类似的属性联动。在ShaderGraph中创建一个_Surface属性Float使用Keyword模式。在Master Node的Surface选项中选择Transparent时Graph会自动为你处理混合、深度写入等设置。但你可以在Graph中通过Branch节点让_Surface的值去控制其他属性的默认值。暴露_SrcBlend、_DstBlend等属性给材质但通过_Surface来驱动它们的默认值逻辑这通常需要在自定义HLSL代码块中实现。在手写Shader中 你可以在Shader的Properties块和SubShader块中明确定义这些关联。例如Properties { [Enum(Opaque,0, Transparent,1)] _Surface (Surface Type, Float) 0 [Toggle] _Blend (Enable Blending, Float) 0 [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend (Src Blend, Float) 1 [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend (Dst Blend, Float) 0 [Toggle] _ZWrite (Depth Write, Float) 1 } SubShader { Tags { RenderType Opaque Queue Geometry // 队列可以根据_Surface动态计算但通常更简单的是在代码中设置material.renderQueue } Blend [_SrcBlend] [_DstBlend] ZWrite [_ZWrite] // ... Pass 内容 }然后在C#脚本中你可以创建一个方法当_Surface改变时同步设置好_Blend、_SrcBlend、_DstBlend、_ZWrite和renderQueue就像我们对URP Lit做的那样。这样你的自定义Shader也拥有了清晰、可预测的动态行为。6. 问题排查清单与现场调试实录当动态修改材质属性效果不符合预期时可以按照以下清单进行排查确认属性值是否真的被设置Debug.Log($Surface: {material.GetFloat(_Surface)}, Blend: {material.GetFloat(_Blend)}, SrcBlend: {material.GetFloat(_SrcBlend)}, DstBlend: {material.GetFloat(_DstBlend)}, ZWrite: {material.GetFloat(_ZWrite)}, Queue: {material.renderQueue});将实际获取的值与你的预期值对比。检查Shader关键字foreach (var keyword in material.shaderKeywords) { Debug.Log(keyword); }确认_SURFACE_TYPE_TRANSPARENT等关键关键字是否正确启用或禁用。使用Frame Debugger这是Unity最强大的图形调试工具。在Window Analysis Frame Debugger中捕获一帧。逐条查看绘制命令Draw Call找到你的目标物体。在右侧详情面板中你可以看到该次绘制所使用的Shader、渲染状态Blend State, Depth State和渲染队列。这是验证你的代码修改是否最终影响到GPU管道的黄金标准。检查材质实例化在编辑器运行时选中你的物体查看Inspector中的材质是否显示为“Instance”。如果不是说明你可能在修改共享材质这会影响所有使用该材质的物体。验证渲染顺序在Scene视图中开启Overlay下拉菜单中的“Transparency Sort”或使用一些显示绘制顺序的调试工具查看透明物体的绘制顺序是否正确。一个真实的调试案例我曾遇到一个特效需要在显示和隐藏时淡入淡出。我通过代码将_Surface改为1并设置了混合因子但特效始终无法正确透明显示。通过Frame Debugger我发现该物体的绘制命令仍然在不透明队列RenderQueue 2500中且深度写入ZWrite是开启的。检查代码后发现我漏掉了material.renderQueue的设置并且_ZWrite也没有关闭。修正这两项后特效立刻正常了。这个经历让我深刻体会到动态修改材质属性是一个“套餐”必须全套上齐缺一不可。动态修改URP材质属性尤其是混合模式和渲染队列绝不是改一个_Surface参数那么简单。它要求开发者深入理解渲染管线中这些状态的意义和它们之间的制约关系。通过本文拆解的属性联动网络、提供的正确设置方法、避坑指南和调试手段希望你能建立起一套完整、可靠的处理流程。下次再遇到“材质球改不动”的问题时你会清楚地知道问题不在“图层锁了”而在于你是否掌握了打开这把锁的、正确的“钥匙组合”。

相关新闻

小米嵌入式面试核心考点解析:从C语言到RTOS的实战准备指南

小米嵌入式面试核心考点解析:从C语言到RTOS的实战准备指南

最近在辅导几位准备嵌入式校招的同学时发现一个普遍现象:很多人在准备小米这类大厂的嵌入式岗位面试时,投入了大量时间刷题背八股,但实际面试中却频频碰壁。从收集到的真实面经来看,小米嵌入式面试的考察重点已经发生了明显变化—…

2026/10/12 21:35:46 阅读更多 →
Rust交叉编译实战:从基础到高级技巧

Rust交叉编译实战:从基础到高级技巧

1. Rust交叉编译核心概念解析 交叉编译是指在一个平台上生成另一个平台可执行代码的过程。Rust作为系统级语言,其交叉编译能力尤为强大。要理解Rust交叉编译,需要掌握以下几个关键概念: 目标三元组(Target Triple) :由CPU架构、…

2026/10/12 18:30:41 阅读更多 →
Go语言context核心机制与并发编程实践

Go语言context核心机制与并发编程实践

1. 理解Go语言context的核心价值在Go语言中,context包是处理请求生命周期和跨API边界数据传递的核心机制。我第一次真正理解context的重要性是在处理一个微服务架构下的订单处理系统时。当时系统频繁出现goroutine泄漏,导致内存不断增长,最终…

2026/10/12 0:06:39 阅读更多 →

最新新闻

Sufer 8.0英文版等值线图实战:从散点插值到批量出图的完整避坑指南

Sufer 8.0英文版等值线图实战:从散点插值到批量出图的完整避坑指南

简介:Surfer 8.0英文版是Golden Software公司推出的专业地形图绘制与三维建模软件,面向地质、环境科学、工程及地球科学领域的从业者与学习者,用于将离散数据转化为连续格网表面并生成专业图件。压缩包共234个文件,约12.41MB&…

2026/10/13 20:10:07 阅读更多 →
校园外卖系统数据库课设实战:三端闭环与状态机设计

校园外卖系统数据库课设实战:三端闭环与状态机设计

简介:本资源是一套完整的微信小程序校园外卖系统课程设计实践项目,面向高校数据库原理与应用、Web前端开发及小程序实战类课程的学生与教师,解决课程设计中缺乏真实业务场景、前后端协同与数据库建模结合案例的问题。压缩包共123个文件&#…

2026/10/13 20:10:07 阅读更多 →
二值图中心线提取实战:从细化算法到毛刺修剪与亚像素优化

二值图中心线提取实战:从细化算法到毛刺修剪与亚像素优化

做图像处理开发的朋友,十有八九都碰到过这类需求:从一张二值图里,把细长目标的中心线稳定地提出来。PCB走线、打印字符的笔画中心、纤维或者线缆的轴线,甚至医学影像里的血管路径,本质上都是同一个问题。最直觉的方案是…

2026/10/13 20:10:07 阅读更多 →
布匹瑕疵数据集-2019天池:工业表面检测小目标与低对比度缺陷基准

布匹瑕疵数据集-2019天池:工业表面检测小目标与低对比度缺陷基准

简介:本资源为2019年天池平台发布的布匹表面瑕疵检测专项数据集,面向计算机视觉方向的初学者与工业质检算法研究者,适用于缺陷识别、目标检测模型训练与小样本学习等实践场景。压缩包共935个文件,含689张JPG格式布匹瑕疵图像&…

2026/10/13 20:10:07 阅读更多 →
STM32F407ZG智能门锁实战:矩阵键盘+OLED+蓝牙+舵机全链路实现

STM32F407ZG智能门锁实战:矩阵键盘+OLED+蓝牙+舵机全链路实现

简介:本资源是一套基于STM32F407ZGT6的智能门锁完整嵌入式开发项目,面向电子/自动化/物联网方向本科生及毕业设计学生,聚焦密码验证、本地交互与蓝牙远程控制三大核心功能,切实解决毕业设计中硬件选型、多外设协同与系统集成等典型…

2026/10/13 20:10:07 阅读更多 →
PS5串流实战指南:从局域网到外网的远程游戏配置与延迟优化

PS5串流实战指南:从局域网到外网的远程游戏配置与延迟优化

直接接PS5玩家一个很现实的问题:这台机器买回来之后,是不是基本就长在客厅电视柜上了?客厅被占、卧室想玩、出差想刷两把,每次都只能乖乖回到电视前。我捣鼓AnyPS5这套串流方案,就是为了把这台主机从HDMI线的长度里解放…

2026/10/13 20:09:06 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →