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;