From 1e017648c6dcba29a55c46aef3718a5ae72eedd2 Mon Sep 17 00:00:00 2001 From: LiRuoChen <571244399@qq.com> Date: Thu, 11 Jun 2026 10:45:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E5=85=B3=E9=97=AD=E5=90=8E=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=99=A8=E6=97=B6=EF=BC=8C=E8=BF=94=E5=9B=9E=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E7=A9=BA=E6=95=B0=E7=BB=84=E3=80=82=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=90=8E=E5=A4=84=E7=90=86=E5=B7=A5=E4=BD=9C=E7=9A=84?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=EF=BC=8C=E7=8E=B0=E5=9C=A8=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E9=80=89=E5=AE=9A=E6=98=AF=E5=90=A6=E5=8F=AA=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=9C=A8=E4=B8=BB=E5=83=8F=E6=9C=BA=E4=B8=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GeoLayerPickerRenderPassFeature.cs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs b/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs index e05f6f5..23f0d25 100644 --- a/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs +++ b/Runtime/MeshDetection_URP/GeoLayerPickerRenderPassFeature.cs @@ -11,6 +11,16 @@ using XericLibrary.Runtime.MacroLibrary; #if UNITY_2022_1_OR_NEWER namespace XericLibrary.PostProcess { + /// + /// 摄像机匹配模式 + /// + public enum CameraMatchMode + { + /// 通过 MainCamera 标签匹配 + Tag, + /// 通过名称匹配 "Main Camera" + Name + } /// /// 用于存储展平后的 SubMesh 渲染数据 /// @@ -326,6 +336,8 @@ namespace XericLibrary.PostProcess public IReadOnlyList GetMaterialIslands() { + if (!isActive) + return Array.Empty(); UpdateMaterialIslands(); return m_MaterialIslands; } @@ -599,6 +611,13 @@ namespace XericLibrary.PostProcess #region Inspector 配置参数 + [Header("摄像机过滤")] + [Tooltip("开启后只在 MainCamera 上执行,避免多摄像机 FOV 不一致导致结果错位。")] + public bool onlyOnMainCamera = true; + + [Tooltip("MainCamera 匹配模式:Tag = 通过 MainCamera 标签匹配;Name = 通过名称匹配")] + public CameraMatchMode cameraMatchMode = CameraMatchMode.Tag; + [Header("拾取材质与尺寸")] public Material pickMaterial; public Vector2Int pickRTSize = new Vector2Int(64, 64); @@ -860,6 +879,12 @@ namespace XericLibrary.PostProcess public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { + Camera currentCam = renderingData.cameraData.camera; + + // 如果开启 onlyOnMainCamera,只匹配目标摄像机 + if (onlyOnMainCamera && !IsMainCamera(currentCam)) + return; + if (m_IsDirty) { RebuildDrawList(); @@ -907,6 +932,22 @@ namespace XericLibrary.PostProcess } } + /// 判断当前摄像机是否为目标摄像机 + private bool IsMainCamera(Camera cam) + { + if (cam == null) return false; + + switch (cameraMatchMode) + { + case CameraMatchMode.Tag: + return cam.CompareTag("MainCamera"); + case CameraMatchMode.Name: + return cam.name == "Main Camera"; + default: + return false; + } + } + private void OnReadbackComplete(AsyncGPUReadbackRequest request) { m_IsReadbackInProgress = false;