移动/游戏
Unity 项目从 Built-in 渲染管线迁移到…
当需要把 Unity 项目、场景、材质或着色器从 Built-in Render Pipeline 升级/转换到 Universal Render Pipeline(URP),或修复迁移后出现的粉色材质、光照/后处理/烘焙异常时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
Unity 项目从 Built-in 渲特定
解决思路
- 先检测当前渲染管线:用 eval 读取 UnityEngine.Rendering.GraphicsSettings.defaultRenderPipeline 与 UnityEngine.QualitySettings.renderPipeline,判断是 Built-in(NULL)、URP(UniversalRenderPipelineAsset)还是 HDRP(HDRenderPipelineAsset);HDRP 不适用本流程,只做基本对比说明。
- 逐个 Quality level 检查管线分配:遍历 UnityEngine.QualitySettings.names,用 UnityEngine.QualitySettings.GetRenderPipelineAssetAt(i) 列出每级使用的 asset;若该 API 不可用,改读 ProjectSettings/QualitySettings.asset,不要用 SetQualityLevel 在运行时切换。
- 按需加载参考文档:始终读 references/migration-workflow.md;涉及材质/着色器/粉色材质/自定义渲染时读 references/custom-shader-triage.md 与 references/complex-shader-situations.md;涉及光照/烘焙/反射探针/阴影/性能时读 references/quality-settings-map.md;实际执行迁移或修复时读 references/implementation-patterns.md。
- 把请求分类为:完整 3D Built-in→URP 迁移、Built-in 2D→URP 2D 迁移、仅选定材质转换、仅规划/说明、迁移后排障;若项目已在 URP 上则切换到排障模式,不要盲目重跑安装。
- 盘点迁移面:用 UnityEditor.AssetDatabase.FindAssets 或等价查询列出材质(含粒子/VFX 材质)、植被材质(草、树、地形细节、SpeedTree、billboard、leaf-card、cutout、风动植被)、着色器、场景与重要 prefab、URP/renderer asset、后处理/Volume profile、Lighting Settings、Lighting Data、lightmap、light probe、reflection probe、混合/烘焙灯光。
- 扫描渲染风险标记:搜索 PostProcessLayer、PostProcessVolume、UnityEngine.Rendering.PostProcessing、OnRenderImage(、RenderWithShader、SetReplacementShader、#pragma surface、GrabPass、CGPROGRAM、CommandBuffer、自定义 include 路径、包着色器命名空间,以及 Nature/、SpeedTree、TreeCreator、Grass、Foliage、_Cutoff、_AlphaClip、_Cull、billboard、wind 等植被标记。
- 若 PPv2 已安装但文本搜索无结果,改用 Unity API 按组件/类型检查已打开场景与 profile asset,因为场景 YAML 与序列化包引用可能被文本搜索漏掉。
- 判断项目形态(3D、2D 或混合),并在提出转换前汇总当前状态(例如:仍在 Built-in、未分配 URP asset、含 PPv2 引用、含使用 surface shader 语法的自定义着色器)。
- 收集需求:范围(整项目/选定材质/仅排障)、目标渲染器(标准 URP 或 URP 2D)、验证目标场景/prefab/相机、风险容忍度、渲染依赖(自定义/Asset Store 着色器、PPv2、烘焙光照、图像效果、command buffer、replacement shader、多 Quality level)、执行权限(仅规划 vs 实际修改)。
- 安全门:在任何会改动管线的操作前,必须先让用户确认回滚点(分支、备份、归档或一次性副本);未确认前停在规划模式,绝不安装 URP、分配 URP asset、运行转换器或编辑材质/场景。
- 把引擎升级风险与管线升级风险分开:若项目同时要换 Unity 版本,建议先做引擎升级,再做管线迁移,不要当作一次盲操作。
- 回滚安全一旦确认即覆盖整轮迁移,不要在每个转换器前反复询问;只有出现新的破坏性清理决策、包/域重载中断执行或反复修复达到迭代上限时才再询问。
- 若项目已部分迁移,先确认此前是否已确认回滚安全:是则从第一个未完成项继续;否则报告部分状态并在继续改动前询问。
- 按路径执行:Path A 标准 3D Built-in→URP;Path B Built-in 2D→URP 2D(不要与标准 URP 混用同一流程);Path C 仅选定材质转换(仅当项目已在 URP 上);Path D 对已有迁移排障(优先处理影响最大的破损,不要盲目重跑整个迁移)。
- URP 安装:安装会触发包刷新、编译与域重载,应视为阶段边界;不要在 eval 中无限自旋等待 UnityEditor.PackageManager.Client.Add,先请求安装,待 Unity 刷新完成后通过 Packages/manifest.json、包列表或 URP 类型/asset 是否存在来验证;若 eval 超时或返回空,下一轮从部分状态继续,不要重装或重跑整个迁移。
- 创建所需的 URP asset 与 renderer asset(若不存在);若已存在则先检查并复用,不要自动创建重复项。
- 在 Graphics 设置及所有相关 Quality level 中分配 URP asset;2D 项目要先创建并分配正确的 2D Renderer asset;在 URP 真正成为目标配置的活动管线前不要继续。
- 选择正确的 Render Pipeline Converter 路径:Built-in Render Pipeline to URP 或 Built-in Render Pipeline 2D to URP 2D;先初始化转换器并检查候选变更,再执行转换。
- 标准 3D 迁移优先使用对应转换器:Rendering Settings、Material Upgrade、Animation Clip Converter、Read-only Material Converter、Post-processing Stack v2 Converter;仅选定材质转换时使用定向材质转换流程,而非整项目转换。
- 转换前审查警告与失败项;仅在用户确认项目可安全改动后运行转换。
- 转换后逐个读取材质的 shader.name 验证落点:MaterialUpgrader.FetchAllUpgradersForPipeline 会同时返回 2D 与 3D provider,二者以相同优先级声明 Standard,3D 项目中的 Standard 材质可能被静默转成 Universal Render Pipeline/2D/Mesh2D-Lit-Default 而非 Universal Render Pipeline/Lit;若发现落到 2D/ 着色器,从回滚点恢复后用 3D 过滤的 upgrader 列表或 implementation-patterns.md 中的手动模式重转。
- 转换后验证已保存的项目状态:重新打开或重新查询代表性 asset,而不是只信命令输出;场景级编辑后要保存 asset 与已打开场景,因为 AssetDatabase.SaveAssets() 不足以证明场景组件、相机数据、活动光照设置、反射探针与 PPv2 启用状态已保存。
- 验证 Graphics 与目标 Quality level 已分配 URP asset:重新查询 QualitySettings.GetRenderPipelineAssetAt(i) 或读取 ProjectSettings/QualitySettings.asset 中保存的 customRenderPipeline 条目;若仍为 {fileID: 0} 则说明未显式分配;不要调用可能不存在的 QualitySettings.SetRenderPipelineAssetAt,改用 SetQualityLevel(index) 切换、设置 QualitySettings.renderPipeline = urpAsset、再恢复原级别并核对保存值。
- 验证材质确实引用 URP 着色器;对照转换前的材质快照确认原本有 albedo 贴图的材质现在 _BaseMap 非空(不要用转换后的 _MainTex 作为真值来源)。
- 验证粒子/VFX 材质不再引用 Built-in 粒子着色器 ID 或旧着色器名,必要时改用 Universal Render Pipeline/Particles/Unlit 等 URP 粒子/效果着色器;名称或路径含 Particle、Fog、Smoke、Steam、VFX、Additive 的效果材质不要盲目改成 Universal Render Pipeline/Lit,要保留透明/叠加行为。
- 验证植被材质保留 cutout/alpha clipping、渲染面意图、贴图、tint、法线与预期的风动/billboard 行为;若草/树卡片因专用着色器行为丢失而变成实心或静止,则材质转换只算部分完成。
- 若尝试了 PPv2 转换,确认保存的 URP Volume profile 含持久非空 components 条目,且场景/相机接线使用 URP 兼容组件。
- 若存在烘焙光照,保留旧 Lighting Data 与 lightmap 作为参考数据,再验证其在 URP 下是否仍可接受;若创建了新的 Lighting Settings asset,保存/重载后要验证场景确实引用它(磁盘上存在 asset 不够);实际迁移中应尝试重烘焙/刷新,若本轮无法完成则报告为部分迁移并在后续从光照/探针阶段继续。
- 不要凭意图声称“已刷新反射探针”:要验证新的或更新的探针输出、已变更的保存探针 asset 或成功的探针渲染工具输出;若现有 EXR 文件未变,应说探针仅作为参考保留或仍需刷新。
- 任何验证失败项都报告为未完成/需人工跟进,而不是已迁移。
- 材质变粉/着色器编译失败/视觉严重漂移时,先读 references/custom-shader-triage.md:检查确切材质着色器分配而非只看场景症状,先读 Console 与 Inspector 错误再改着色器代码。
- 对着色器分类:转换器应能处理的受支持 Built-in 着色器、可安全移植的简单自定义着色器、需要专项迁移计划的复杂自定义着色器、需要 cutout/双面叶片/billboard/地形细节/风动行为的植被着色器、可能需要维护者文档或专项移植的包/Asset Store 着色器。
- 复杂着色器情形读 references/complex-shader-situations.md;优先最小安全修复,先恢复代表性材质的渲染,验证后再扩大修复范围;除非映射明确、已测试且有范围限定,绝不整项目批量搜索替换着色器代码。
- PPv2 处理:转换前盘点 PostProcessVolume、PostProcessLayer 与 PPv2 PostProcessProfile asset;优先用 URP 的 Post-processing Stack v2 Converter,而不是凭记忆手工搭建等价 profile。
- PPv2 转换后验证保存的 URP VolumeProfile 含持久 override 组件,而不是空 components: [] 或悬空 {fileID: 0} 引用;若用脚本创建 profile,VolumeProfile.Add<T>() 只创建组件对象,还需 AssetDatabase.AddObjectToAsset(component, profile)、标记 profile 与组件为 dirty、保存 asset、重载 asset 并统计保存的非空组件数后才可报告成功。
- 验证代表性场景含预期的 Volume 对象,且目标相机在需要时其 UniversalAdditionalCameraData 已启用后处理;若源场景仍只序列化 PPv2 sharedProfile 引用而无 URP Volume 引用新 VolumeProfile,则 PPv2 迁移未完成,即使磁盘上存在 URP profile asset。
- 若活动 URP Volume 引用空 profile,视为场景接线未完成而非已启用后处理;检查是否残留旧 PostProcessVolume/PostProcessLayer 组件,并说明是有意保留、无害遗留还是未解决迁移工作。
- 若旧 PPv2 组件仅作参考保留而 URP Volume 已启用,为 URP 视觉验证禁用旧 PPv2 组件/layer 以避免双重后处理;在视觉对齐被接受或用户批准清理前不要删除。
- 在存在已验证 URP 替代或用户接受效果被丢弃/转人工前,不要移除 PPv2 包、组件或 profile。
- 实际迁移中若源 profile 可用,不要把常见 PPv2 对齐留作模糊人工任务:为 Bloom、Color Adjustments/Tonemapping、Vignette、Depth of Field 等可映射效果创建持久 URP override,并验证保存 profile 含非空组件。
- 对不支持或不等价的效果(如 PPv2 Screen Space Reflections、应改为 renderer feature/SSAO 的 Ambient Occlusion)可标记为人工跟进;若无法可靠创建 URP Volume override,则记录 PPv2 效果及其 URP 等价物,不要声称已迁移。
- 不要把工具瞬时成功当作后处理成功:命令日志说“Added Bloom”不够,要重新读取保存的 VolumeProfile asset 或在保存/重载后检查场景;若保存 profile 为空,应说 PPv2 仅被记录或部分准备,而非已迁移。
- 若搜索到 OnRenderImage,按自定义全屏效果处理:URP 中应转向 ScriptableRenderPass、Renderer Feature 或 URP 自定义后处理,而非保留 Built-in 图像效果路径。
- 若搜索到 RenderWithShader 或 SetReplacementShader,按 replacement shader 情形处理,通常需要专门的 URP renderer feature 或自定义 pass 策略。
- 若效果依赖 scene color、depth 或 normals,验证 URP 兼容路径,不要假设 Built-in 做法仍适用;若自定义相机在 Built-in 中叠加效果,迁移后要显式验证相机输出而非假设对齐。
- 高级着色器/效果排障要给出具体替代模式:GrabPass 提到 _CameraOpaqueTexture / Scene Color、所需 URP asset 设置以及透明排序可能与 Built-in 不同的限制;OnRenderImage 提到 ScriptableRendererFeature 加 ScriptableRenderPass,Unity 6 风格模板用临时 RTHandle 与 Blitter.BlitCameraTexture;绝不推荐 Blitter.BlitCameraTexture(cmd, source, source, material, pass) 等 source-to-source blit 作为主要 OnRenderImage 替代,若不展示更安全的临时目标模式就省略代码示例并解释架构;Surface Shader 说明 #pragma surface 无直接 URP 等价物,按复杂度选 Shader Graph 或 URP HLSL 顶点/片元重写;不要只说“重写它”,要给出实用的第一步移植与验证目标。
- 质量/光照/视觉对齐:审查 Graphics 设置与每个活动 Quality level;若某级无自定义 URP asset,说明是有意回退到 Graphics 设置还是仍需显式分配;未逐级检查前不要声称所有质量级别已迁移。
- 若使用序列化项目设置,保存字段通常是 customRenderPipeline,写入猜测字段如 renderPipelineAsset 不够,除非保存的 asset 能证明分配;脚本分配时按 URP Render Settings 转换器模式:缓存 QualitySettings.GetQualityLevel(),对每个目标级别调用 QualitySettings.SetQualityLevel(index),设置 QualitySettings.renderPipeline = urpAsset,再恢复原级别并在磁盘上验证。
- 检查影响对齐的 URP asset 设置:shadows、shadow distance 与 cascades、MSAA、render scale、HDR、opaque texture、depth texture(当效果依赖时)。
- 不要承诺光照自动完全一致:Built-in 与 URP 在光照衰减、烘焙 GI 外观、阴影调优、反射探针响应、tonemapping、曝光与后处理行为上可能不同。
- 烘焙光照场景:把现有 lightmap 与 Lighting Data 当参考材料而非保证的最终 URP 输出;盘点 Lightmapping.lightingSettings、场景 LightmapSettings、烘焙/混合灯光、light probe、reflection probe 与现有 LightingDataAsset。
- 在用户有视觉参考或回滚点前保留烘焙数据,但若旧 Built-in lightmap 导致过曝或扭曲,不要将其作为最终 URP 光照方案继续启用。
- 若场景过曝、过暗或不匹配,先在 URP 验证时禁用旧 PPv2 以隔离后处理/曝光,再在改灯光前检查 URP Volume 的曝光/tonemapping/bloom。
- 若清除烘焙数据后场景不再过曝,说明旧 lightmap/Lighting Data 是不兼容的活动数据;随后在 URP 下用最终 URP asset、renderer、Volume 与 Quality 设置重烘焙,而不是对着旧烘焙调灯光。
- 创建或分配 URP 兼容 LightingSettings 时,标记 lighting settings 与活动场景为 dirty、保存场景、重载或重新查询,并验证保存场景引用预期的 .lighting asset;仅 AssetDatabase.SaveAssets() 不会保存场景的 Lightmapping.lightingSettings 引用;若保存场景仍指向 Enlighten/realtime-GI 设置 asset,不要报告“Baked GI enabled”。
- 当视觉对齐是需求一部分且旧 LightingData.asset / 反射探针 EXR 仍来自 Built-in 烘焙时,将其视为参考数据直到在 URP 下重烘焙/刷新;不要仅凭旧烘焙数据声称视觉对齐已保留。
- 视觉对齐重要时建议清除/重烘焙光照并刷新反射探针;除非代表性场景在 URP 设置后(最好在 URP 烘焙后)经过视觉检查,否则不要声称烘焙光照已成功迁移。
- 2D 光照项目:确保 sprite 与 tilemap 在需要时使用 URP 兼容的 lit 材质。
- 性能回退时检查原因:更重的 URP asset 设置、后处理、额外阴影开销、自定义着色器移植或非批处理着色器。
- 修改 URP asset 设置后,报告 MSAA、附加光上限、HDR、depth texture、opaque texture 等值前,要重新读取保存的 asset 或保存后查询属性。
- 验证阶段:在代表性场景上捕获 Scene View 或指定相机(见 references/capturing-the-editor.md);评估是否无粉色材质(除非仍有未解决的自定义着色器阻塞)、主光照与阴影是否正常、烘焙 GI/lightmap/light probe/reflection probe 是否可接受或明确标记需重烘焙/刷新、相机是否渲染预期内容、后处理/全屏效果是否正常、sprite/tilemap/2D 光照是否正常。
- 验证持久项目数据而非仅视觉输出:检查保存的 URP asset、renderer asset、场景引用、材质着色器 GUID/名称、Quality 设置与 Volume profile;确认检查的是代表性场景而非默认/测试场景,再断定不存在烘焙光照、PPv2 或反射探针。
- 材质迁移验证要包含粒子/VFX 材质:仍存在 Built-in 粒子着色器 ID 或旧粒子着色器名意味着材质迁移未完成。
- PPv2 迁移:保存的 URP VolumeProfile asset 必须含预期 override 组件才可报告已迁移;若工具日志报告已映射后处理但保存 profile 重载后 components: [],以保存 profile 为准,报告迁移失败/未完成。
- 烘焙光照场景:检查 Lighting Settings、Lighting Data/lightmap 引用、light probe 与 reflection probe;编译成功不能证明烘焙光照对齐;若旧 lightmap 导致过曝,清除活动烘焙数据并在 URP 下重烘焙后再判断对齐;分配新光照设置后验证保存的场景引用,而不只是新 .lighting asset 存在。
- 若旧 LightingData.asset 仍被分配且反射探针 EXR 未重新生成或未在视觉检查后明确接受,将光照/探针归类为保留或部分完成,而非已刷新。
- 用 Unity.GetConsoleLogs 检查 Console 是否有着色器、渲染管线或 renderer feature 错误;先修影响最大的问题再验证;最多迭代 3 次后报告剩余阻塞或询问用户如何继续。
- 排障决策树:项目“迁移”后仍像 Built-in 时,检查 Graphics 是否分配 URP asset、相关 Quality level 是否也指向 URP asset、活动管线是否确为 URP。
- URP 安装后迁移中断时,视为包刷新/域重载边界而非失败;重查 Packages/manifest.json 与包状态,若已安装不要重装;检查部分 asset(URP asset、renderer asset、已转换材质、空 Volume profile、场景组件变更);若 URP 已安装/分配但 Built-in 材质仍占主导或场景变粉,材质转换是下一个未完成项,不要停在“URP 设置完成”;从第一个未完成验证项继续:Graphics/Quality 分配、renderer asset 有效性、材质转换、PPv2→URP Volume 迁移、烘焙光照重烘焙、最终验证;若上一轮无最终回复,报告证据不完整并在新一轮继续。
- 材质变粉/亮粉时:检查 Console 与 Inspector 着色器错误;确认材质用的是受支持 Built-in 着色器、自定义着色器还是包着色器;受支持 Built-in 着色器先走转换器路径或定向材质转换;若项目已在 URP 且大量受支持 Built-in 材质仍在,视为材质转换未完成而非最终视觉对齐工作;自定义/包着色器进入 custom-shader-triage.md,必要时进入 complex-shader-situations.md。
- 场景过暗/过亮/不对时:对比 Scene View 与 Game View 捕获;先查双重后处理(保留的 PPv2 PostProcessVolume/PostProcessLayer 加活动 URP Volume 会过曝或扭曲验证捕获);检查阴影、环境光、tonemapping、skybox、曝光、bloom 与后处理;检查烘焙光照状态(Lighting Settings、Lighting Data asset、lightmap 引用、混合/烘焙灯光、light probe、reflection probe);在重写内容前检查质量级别分配与 URP asset 设置;若清除烘焙数据修复严重过曝,把旧 lightmap 当过期活动数据,仅作参考/回滚证据后在 URP 下重烘焙;若场景依赖烘焙光照,在声称视觉对齐前建议 URP 重烘焙与反射探针刷新;记住 Built-in 与 URP 光照衰减可能不同,这是调优任务而非转换失败证据。
- 后处理/全屏效果消失时:检查 PPv2 是否已转换、目标相机与 volume 设置是否仍有效;检查保存的 URP VolumeProfile asset(空 profile 意味着 PPv2 效果实际未迁移);检查场景中是否仍残留活动的旧 PostProcessVolume/PostProcessLayer 组件;搜索 OnRenderImage、自定义 blit 代码或 replacement-shader 相机效果;用 URP 兼容方式移植效果,而非保留 Built-in 回调路径。
- 透明/折射/扭曲效果损坏时:检查着色器是否依赖 GrabPass 或类似 Built-in 屏幕拷贝流程;若是,用 complex-shader-situations.md 并选择 Scene Color / Renderer Feature / 自定义 pass 方案。
- 2D 光照不影响 sprite 时:确认项目确实使用 2D Renderer;确认现有 sprite 材质在需要时已升级为 URP 兼容 lit 材质;不要以为拖入新 sprite 正常就证明旧项目材质正确。
- 性能回退时:检查 render scale、shadows、additional lights、MSAA、后处理、opaque/depth texture 等 URP asset 设置;检查自定义着色器移植是否丢失批处理兼容或引入额外 pass;先调优设置,不要直接假设只能回滚。
- 自定义着色器能编译但视觉仍错时:判断是简单参数漂移还是结构性不兼容;若来自 surface shader、GrabPass、replacement-shader 工作流或自定义光照路径,按复杂迁移情形处理;先在单个代表性材质上验证再全项目推广。
- 核心护栏:先检测活动渲染管线;HDRP 只解释不匹配并给基本对比建议;未确认回滚安全前不改动项目,停在规划模式;不把工具日志或已创建 asset 当证据,要保存/重载/重查 Graphics、Quality、材质、Volume、光照、探针、Console 与代表性场景后再下状态结论;不把部分阶段合并为项目级完成,按成功门报告 Phase complete、Partial migration、Manual follow-up;不批量重写脆弱渲染代码,对自定义着色器、GrabPass、OnRenderImage、replacement shader、包渲染代码与不支持的 PPv2 效果使用限定范围的映射。
- 汇报内容:使用的迁移路径;项目仍是 Built-in、部分迁移还是完全 URP;运行了哪些转换器;自动修复了什么;仍需人工处理什么;验证了哪些场景/材质/相机;剩余风险(尤其复杂着色器、包效果与视觉对齐);后处理是完全迁移、部分准备还是仅记录待人工;Quality level 是显式分配还是有意依赖 Graphics 回退;粒子/VFX 材质是否已转换或仍需 URP 粒子着色器跟进;烘焙光照/lightmap/反射探针是作为参考保留、视觉验证、重烘焙/刷新还是留作人工跟进;曝光、tonemapping、环境补光与相机/Volume 后处理接线是否视觉平衡或仍部分完成。
- 保守使用完成措辞:若报告含任何 Partial、Manual follow-up、not validated、may still need 或不支持功能项,说明具体哪些阶段通过,并把整体迁移称为部分/人工;不要把项目级 complete 与人工跟进条目并列。
- 执行 C# 时通过 Unity CLI 在活动 Editor 中运行:先按 unity-cli 技能完成 CLI 安装、确认已连接 Editor、添加项目 com.unity.pipeline 包、区分真正缺失的 Editor 与卡在 Safe Mode 的 Editor、发现 Editor 命令目录;确认目录中存在 eval 命令(其存在取决于 Pipeline 包版本而非 CLI,缺失则说明并停止)。
- 注意 Editor 版本:低于 6000.3 的 Editor 上 com.unity.pipeline 完全不可用(包使用 6000.3 引入的 IPreprocessBuildWithContext 与 BuildCallbackContext,manifest 却声明 "unity": "6000.0",会安装后编译失败);症状是服务器不启动、unity status 无行无错、Editor 日志出现这两个类型的 CS0246;此时告知用户 Editor 过旧,不要调试 CLI。
- 用 unity command eval --code '<snippet>' 运行 C#;unity command 默认 30 秒超时,安装 URP 会触发包刷新与域重载而超时,应视为阶段边界而非提高超时。
- eval 编译的是语句块而非文件:不能有 using 指令(会被当作资源释放语句报 CS0210);类型必须完全限定(裸 GraphicsSettings、Volume 报 CS0246/CS0103,裸 Object 与 object 歧义报 CS0104);扩展方法不可用,camera.GetUniversalAdditionalCameraData() 要写成 camera.GetComponent<UnityEngine.Rendering.Universal.UniversalAdditionalCameraData>(),LINQ 要写成 System.Linq.Enumerable.FirstOrDefault(sequence, predicate)。
- 按片段形态选择执行模式:语句形态(如检测片段)直接传给 eval,完全限定且无 using;类或方法形态(声明 class、static 方法或 [MenuItem],如材质快照模式)是项目文件而非 eval 输入,保存到 Assets/Editor/ 让 Unity 编译,再用一行 eval 调用入口点,using 指令保留在该文件中;多步迁移优先用脚本路线,因为它能挺过 URP 安装与材质转换触发的域重载,而长 eval 载荷不能。
- 渲染管线迁移不能盲写:分配 URP asset、转换材质、重烘焙光照都需要活动 Editor;Editor 不可达是停止信号,不是手改 ProjectSettings/GraphicsSettings.asset 的提示。
适用边界 · 注意事项
- 项目使用 HDRP 或需要从 HDRP 迁移时(本流程只覆盖 Built-in 到 URP,HDRP 仅给基本对比建议)。
- 用户未确认回滚点(分支、备份、归档或一次性副本)时,不得执行任何改动管线的操作,只能停在规划/审计模式。
- Editor 版本低于 6000.3 导致 com.unity.pipeline 无法编译,或 Editor 不可达、eval 命令不存在时,无法安全执行迁移。