From ec905d2a2715d099dfffd44c3c0d5b36d9f6cca0 Mon Sep 17 00:00:00 2001 From: GanX <2423855310@qq.com> Date: Mon, 20 Oct 2025 10:42:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(Connect=20Distance):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E7=8E=A9=E5=AE=B6=E6=9C=80=E5=A4=A7=E5=8F=AF=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E8=B7=9D=E7=A6=BB=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Prefab/Gameplay/Player.prefab | 1 + Assets/Scenes/Test.unity | 213 +++++++++++++++++- .../Player/PlayerConnectController.cs | 9 + 3 files changed, 220 insertions(+), 3 deletions(-) diff --git a/Assets/Prefab/Gameplay/Player.prefab b/Assets/Prefab/Gameplay/Player.prefab index fbf96cb..5f17e24 100644 --- a/Assets/Prefab/Gameplay/Player.prefab +++ b/Assets/Prefab/Gameplay/Player.prefab @@ -330,6 +330,7 @@ MonoBehaviour: m_EditorClassIdentifier: IsEnableConnecting: 1 raycaster: {fileID: 8217262775185484522} + maxConnectDistance: 10.5 --- !u!1 &3610935294554348573 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/Test.unity b/Assets/Scenes/Test.unity index 8bc511e..1ca72f9 100644 --- a/Assets/Scenes/Test.unity +++ b/Assets/Scenes/Test.unity @@ -310,6 +310,74 @@ MonoBehaviour: m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 1 +--- !u!1001 &473911345 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalPosition.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalPosition.z + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2052340463965227198, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_Name + value: Button (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} --- !u!1001 &769057572 PrefabInstance: m_ObjectHideFlags: 0 @@ -378,6 +446,74 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9e2e93bf07726014bac5a458c32e697f, type: 3} +--- !u!1001 &865274353 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalPosition.x + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.6 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalPosition.z + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2052340463965227198, guid: ddd89e93db279184daa80d86bd4e770f, + type: 3} + propertyPath: m_Name + value: Button (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} --- !u!1001 &993640446 PrefabInstance: m_ObjectHideFlags: 0 @@ -688,6 +824,74 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 781c629235eee4f4eb34f1e763aa7f67, type: 3} +--- !u!1001 &1751629950 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalPosition.x + value: -5 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalPosition.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalPosition.z + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 77361986880837193, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2729643726423589850, guid: b3e24e2df98d14e4ebc08cc68c071afa, + type: 3} + propertyPath: m_Name + value: Door (3) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b3e24e2df98d14e4ebc08cc68c071afa, type: 3} --- !u!1001 &1948851238 PrefabInstance: m_ObjectHideFlags: 0 @@ -1002,17 +1206,17 @@ PrefabInstance: - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} propertyPath: m_LocalPosition.x - value: -5 + value: 5 objectReference: {fileID: 0} - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} propertyPath: m_LocalPosition.y - value: 1 + value: 1.3 objectReference: {fileID: 0} - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} propertyPath: m_LocalPosition.z - value: -5 + value: 10 objectReference: {fileID: 0} - target: {fileID: 502199709937918930, guid: ddd89e93db279184daa80d86bd4e770f, type: 3} @@ -1277,9 +1481,12 @@ SceneRoots: - {fileID: 7020889523296792185} - {fileID: 2021089518} - {fileID: 2088331975902746738} + - {fileID: 1751629950} - {fileID: 1948851238} - {fileID: 993640446} - {fileID: 1781028406820323425} - {fileID: 366996911271636373} - {fileID: 6191742170513974480} + - {fileID: 473911345} + - {fileID: 865274353} - {fileID: 6350903300567888677} diff --git a/Assets/Script/Gameplay/Player/PlayerConnectController.cs b/Assets/Script/Gameplay/Player/PlayerConnectController.cs index 250ca88..d14c7f3 100644 --- a/Assets/Script/Gameplay/Player/PlayerConnectController.cs +++ b/Assets/Script/Gameplay/Player/PlayerConnectController.cs @@ -11,6 +11,7 @@ namespace Script.Gameplay.Player { public bool IsEnableConnecting = true; // 是否启用连接功能 [SerializeField] private FirstPersonRaycaster raycaster; // 第一人称射线检测器 + [SerializeField] private float maxConnectDistance = 10f; // 最大连接距离 private IConnectable currentTarget; // 当前注视的可连接对象 private IConnectable previousGazedTarget; // 上一次注视的 IConnectable(用于触发进入/离开) @@ -111,6 +112,14 @@ namespace Script.Gameplay.Player if(!IsEnableConnecting) return; if (outTarget != null && inputTarget != null && outTarget != inputTarget) { + //计算距离 + float distance = Vector3.Distance(outTarget.GetPosition(), inputTarget.GetPosition()); + if (distance > maxConnectDistance) + { + Debug.Log("Cannot create connection: targets are too far apart."); + return; + } + // 创建连接线 ConnectionLine connectionLine = ConnectionLineManager.Instance.GenerateConnectionLine(outTarget, inputTarget); outTarget.OutputConnectionLine = connectionLine; inputTarget.InputConnectionLine = connectionLine;