From ad5fff84257d9919c31f51da094859fad74830f2 Mon Sep 17 00:00:00 2001 From: Steven Lai <2061455536@qq.com> Date: Thu, 6 Mar 2025 17:33:05 +0800 Subject: [PATCH] Add 'IsBelongToSameCase' --- EasyInteractive/EasyInteractive.cs | 53 +- EasyInteractive/Example/Example.unity | 594 +----------------- EasyInteractive/Example/Materials/Item.mat | 4 +- EasyInteractive/Example/Materials/Table.mat | 4 +- EasyInteractive/Example/Scripts/SceneItem.cs | 4 +- EasyInteractive/Example/Scripts/UIItem.cs | 4 +- EasyInteractive/IInteractable.Extension.cs | 14 + .../IInteractable.Extension.cs.meta | 11 + 8 files changed, 91 insertions(+), 597 deletions(-) create mode 100644 EasyInteractive/IInteractable.Extension.cs create mode 100644 EasyInteractive/IInteractable.Extension.cs.meta diff --git a/EasyInteractive/EasyInteractive.cs b/EasyInteractive/EasyInteractive.cs index d34bb10..7b0465e 100644 --- a/EasyInteractive/EasyInteractive.cs +++ b/EasyInteractive/EasyInteractive.cs @@ -24,6 +24,9 @@ namespace HalfDog.EasyInteractive } } + //交互对象之间的关系映射 + public Dictionary> InteractRelationMapper => _interactRelationMapper; + private IFocusable _currentFocused; private IFocusable _previousFocused; private ISelectable _currentSelected; @@ -35,6 +38,7 @@ namespace HalfDog.EasyInteractive private bool _isPointerOverUI; private Dictionary _allInteractCase = new Dictionary(); private List _executingInteractCases = new List(); + private Dictionary> _interactRelationMapper = null; //当前激活的交互情景 private IInteractCase _currentActiveInteractCase; private bool _inUpdate; @@ -58,9 +62,10 @@ namespace HalfDog.EasyInteractive _instance = new EasyInteractive(); } - public EasyInteractive() + private EasyInteractive() { this.EnableMonoUpdater(); + _interactRelationMapper = new Dictionary>(); //加载所有的交互情景 Assembly assembly = typeof(EasyInteractive).Assembly; List types = assembly.GetTypes().Where(type => typeof(IInteractCase).IsAssignableFrom(type) && !type.IsAbstract).ToList(); @@ -72,6 +77,17 @@ namespace HalfDog.EasyInteractive _allInteractCase.Add(types[i],ic); ic.enable = attribute.enableExecuteOnLoad; _executingInteractCases.Add(ic); + //记录下交互对象之间的关系 + List list; + if (_interactRelationMapper.TryGetValue(attribute.interactSubject, out list)) + list.Add(attribute.interactTarget); + else + _interactRelationMapper.Add(attribute.interactSubject,new List { attribute.interactTarget }); + + if (_interactRelationMapper.TryGetValue(attribute.interactTarget, out list)) + list.Add(attribute.interactSubject); + else + _interactRelationMapper.Add(attribute.interactTarget, new List { attribute.interactSubject }); } } } @@ -157,24 +173,29 @@ namespace HalfDog.EasyInteractive _possibleDragTarget = (currentFocused as IDragable); } //如果鼠标按下并且移动了一定距离则开始拖拽 - if (mouseBtnPressed) + if (currentDraged == null && mouseBtnPressed && _possibleDragTarget != null) { - if (currentDraged == null && Vector3.Distance(_mouseDownPosition, Input.mousePosition) > 16f) + if (Vector3.Distance(_mouseDownPosition, Input.mousePosition) > 16f && _readyDrag == _possibleDragTarget) { - if (_possibleDragTarget != null && _readyDrag == _possibleDragTarget) + //拖拽与被选中的不能是同一个 + if (_readyDrag == currentSelected) { - //拖拽与被选中的不能是同一个 - if (_readyDrag == currentSelected) - { - //把选择的对象置空 - SetCurrentSelected(null); - } - //再设置拖拽 - SetCurrentDraged(_readyDrag); + //把选择的对象置空 + SetCurrentSelected(null); } + //再设置拖拽 + SetCurrentDraged(_readyDrag); } } } + else + { + if (Input.GetMouseButtonDown(0)) + { + _possibleDragTarget = null; + _readyDrag = null; + } + } //拖拽处理 if (mouseBtnPressed && currentDraged != null) @@ -261,6 +282,14 @@ namespace HalfDog.EasyInteractive } } + /// + /// 获取所有的交互情景 + /// + /// + public IInteractCase[] GetAllInteractCases() + { + return _allInteractCase.Values.ToArray(); + } public void FixedUpdate() { } public void LateUpdate() { } } diff --git a/EasyInteractive/Example/Example.unity b/EasyInteractive/Example/Example.unity index 232a476..475dac5 100644 --- a/EasyInteractive/Example/Example.unity +++ b/EasyInteractive/Example/Example.unity @@ -198,7 +198,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 + m_VertexColorAlwaysGammaSpace: 1 m_AdditionalShaderChannelsFlag: 0 m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 @@ -216,7 +216,6 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1059271217} - {fileID: 1625231574} - {fileID: 498190671} m_Father: {fileID: 0} @@ -226,132 +225,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} ---- !u!1 &191903456 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 191903457} - - component: {fileID: 191903462} - - component: {fileID: 191903461} - - component: {fileID: 191903460} - - component: {fileID: 191903458} - m_Layer: 2 - m_Name: TempSceneItem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &191903457 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191903456} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1.5, z: 0} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1396306415} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &191903458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191903456} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3} - m_Name: - m_EditorClassIdentifier: - outlineMode: 0 - outlineColor: {r: 0.13573885, g: 1, b: 0, a: 1} - outlineWidth: 5 - precomputeOutline: 0 - bakeKeys: [] - bakeValues: [] ---- !u!136 &191903460 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191903456} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5000001 - m_Height: 2 - m_Direction: 1 - m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} ---- !u!23 &191903461 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191903456} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: ad698dcb1f015e74585d9d1397c722bc, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &191903462 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 191903456} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &399887398 GameObject: m_ObjectHideFlags: 0 @@ -558,7 +431,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 637063d8e14f01b40a70497c738425bd, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &670213194 +--- !u!1 &1031195270 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -566,274 +439,56 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 670213198} - - component: {fileID: 670213197} - - component: {fileID: 670213196} - - component: {fileID: 670213195} - - component: {fileID: 670213199} - - component: {fileID: 670213200} + - component: {fileID: 1031195271} + - component: {fileID: 1031195272} + - component: {fileID: 1031195273} m_Layer: 0 - m_Name: SceneItem + m_Name: Game m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!136 &670213195 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 670213194} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5000001 - m_Height: 2 - m_Direction: 1 - m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} ---- !u!23 &670213196 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 670213194} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: fc54c2611d7066942a5b854425e8879b, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &670213197 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 670213194} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &670213198 +--- !u!4 &1031195271 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 670213194} + m_GameObject: {fileID: 1031195270} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 2, z: -1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &670213199 +--- !u!114 &1031195272 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 670213194} + m_GameObject: {fileID: 1031195270} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc46a818fd9886f4a89e1148cb61fb5a, type: 3} + m_Script: {fileID: 11500000, guid: 72a3401ad569dce41a926bb393f5cfc4, type: 3} m_Name: m_EditorClassIdentifier: - iconSprite: {fileID: 21300000, guid: d5c97c10483bdf345b6ddc0512bfada7, type: 3} ---- !u!114 &670213200 + playMode: 2 +--- !u!114 &1031195273 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 670213194} + m_GameObject: {fileID: 1031195270} m_Enabled: 0 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3} + m_Script: {fileID: 11500000, guid: e2dd8b24bcc0ff64a867856ad3a8e6ca, type: 3} m_Name: m_EditorClassIdentifier: - outlineMode: 0 - outlineColor: {r: 0.13573885, g: 1, b: 0, a: 1} - outlineWidth: 5 - precomputeOutline: 0 - bakeKeys: [] - bakeValues: [] ---- !u!1 &1059271216 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1059271217} - - component: {fileID: 1059271219} - - component: {fileID: 1059271218} - - component: {fileID: 1059271220} - - component: {fileID: 1059271221} - m_Layer: 5 - m_Name: UIItem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1059271217 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1059271216} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2027494078} - m_Father: {fileID: 114661276} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 64} - m_SizeDelta: {x: 200, y: 200} - m_Pivot: {x: 0.5, y: 0} ---- !u!114 &1059271218 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1059271216} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.764151, g: 0.59304047, b: 0.43614277, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &1059271219 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1059271216} - m_CullTransparentMesh: 1 ---- !u!114 &1059271220 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1059271216} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1263b19a7ad3f9e42ae0df0e3f70afc6, type: 3} - m_Name: - m_EditorClassIdentifier: - enableInteract: 1 - icon: {fileID: 2027494079} ---- !u!114 &1059271221 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1059271216} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_WrapAround: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.6886792, g: 0.6886792, b: 0.6886792, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Selected - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1059271218} - m_OnClick: - m_PersistentCalls: - m_Calls: [] --- !u!1 &1346634428 GameObject: m_ObjectHideFlags: 0 @@ -939,145 +594,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1396306411 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1396306415} - - component: {fileID: 1396306414} - - component: {fileID: 1396306413} - - component: {fileID: 1396306412} - - component: {fileID: 1396306416} - - component: {fileID: 1396306417} - m_Layer: 0 - m_Name: Table - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!65 &1396306412 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1396306411} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &1396306413 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1396306411} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: b11820ee1c2f3e344ba5395f8e0fad9b, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1396306414 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1396306411} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1396306415 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1396306411} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.5, z: -1} - m_LocalScale: {x: 2, y: 1, z: 2} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 191903457} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1396306416 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1396306411} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3} - m_Name: - m_EditorClassIdentifier: - outlineMode: 1 - outlineColor: {r: 1, g: 0, b: 0, a: 1} - outlineWidth: 8 - precomputeOutline: 0 - bakeKeys: [] - bakeValues: [] ---- !u!114 &1396306417 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1396306411} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2c72fe5ebd1ffbd4d9dda7c9ff7b864b, type: 3} - m_Name: - m_EditorClassIdentifier: - tempItem: {fileID: 191903456} --- !u!1 &1625231571 GameObject: m_ObjectHideFlags: 0 @@ -1146,81 +662,6 @@ Transform: m_Children: [] m_Father: {fileID: 114661276} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2027494077 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2027494078} - - component: {fileID: 2027494080} - - component: {fileID: 2027494079} - m_Layer: 5 - m_Name: Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &2027494078 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2027494077} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1059271217} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -32, y: -32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2027494079 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2027494077} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!222 &2027494080 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2027494077} - m_CullTransparentMesh: 1 --- !u!1 &2117160339 GameObject: m_ObjectHideFlags: 0 @@ -1366,5 +807,4 @@ SceneRoots: - {fileID: 399887400} - {fileID: 114661276} - {fileID: 1346634432} - - {fileID: 1396306415} - - {fileID: 670213198} + - {fileID: 1031195271} diff --git a/EasyInteractive/Example/Materials/Item.mat b/EasyInteractive/Example/Materials/Item.mat index 966267c..ab14889 100644 --- a/EasyInteractive/Example/Materials/Item.mat +++ b/EasyInteractive/Example/Materials/Item.mat @@ -113,8 +113,8 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 0.495283, b: 0.5359876, a: 1} - - _Color: {r: 1, g: 0.495283, b: 0.5359876, a: 1} + - _BaseColor: {r: 0.2242791, g: 0.27632275, b: 0.754717, a: 1} + - _Color: {r: 0.22427908, g: 0.27632272, b: 0.75471693, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] diff --git a/EasyInteractive/Example/Materials/Table.mat b/EasyInteractive/Example/Materials/Table.mat index a82b01b..42f0699 100644 --- a/EasyInteractive/Example/Materials/Table.mat +++ b/EasyInteractive/Example/Materials/Table.mat @@ -126,8 +126,8 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0.3679245, g: 0.24217868, b: 0.15445887, a: 1} - - _Color: {r: 0.36792448, g: 0.24217865, b: 0.15445882, a: 1} + - _BaseColor: {r: 0.11779833, g: 1, b: 0, a: 1} + - _Color: {r: 0.117798306, g: 1, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] diff --git a/EasyInteractive/Example/Scripts/SceneItem.cs b/EasyInteractive/Example/Scripts/SceneItem.cs index ce53d95..825439c 100644 --- a/EasyInteractive/Example/Scripts/SceneItem.cs +++ b/EasyInteractive/Example/Scripts/SceneItem.cs @@ -37,8 +37,8 @@ public class SceneItem : MonoBehaviour, IDragable public void EndDrag(IFocusable target) { GhostIcon.Instance.HideGhostIcon(); - //判断是否拖拽到了目标 - if (target == null) + //判断是否拖拽到了目标 且当前对象和目标对象是否属于同一个交互对象 + if (target == null || !this.IsBelongToSameCase(target)) gameObject.SetActive(true); } } diff --git a/EasyInteractive/Example/Scripts/UIItem.cs b/EasyInteractive/Example/Scripts/UIItem.cs index a67d580..a54664d 100644 --- a/EasyInteractive/Example/Scripts/UIItem.cs +++ b/EasyInteractive/Example/Scripts/UIItem.cs @@ -36,8 +36,8 @@ public class UIItem : InteractableUIElement,IDragable public void EndDrag(IFocusable target) { GhostIcon.Instance.HideGhostIcon(); - //判断是否拖拽到了目标 - if (target == null) + //判断是否拖拽到了目标 且当前对象和目标对象是否属于同一个交互对象 + if (target == null || !this.IsBelongToSameCase(target)) icon.gameObject.SetActive(true); } } diff --git a/EasyInteractive/IInteractable.Extension.cs b/EasyInteractive/IInteractable.Extension.cs new file mode 100644 index 0000000..368b113 --- /dev/null +++ b/EasyInteractive/IInteractable.Extension.cs @@ -0,0 +1,14 @@ +using HalfDog.EasyInteractive; +using System; +using System.Collections.Generic; + +public static class IInteractableExtension +{ + /// + /// 判断两个交互对象是否属于同一个交互情景 + /// + public static bool IsBelongToSameCase(this IInteractable self, IInteractable other) + { + return EasyInteractive.Instance.InteractRelationMapper.TryGetValue(self.interactTag, out List types) && types.Contains(other.interactTag); + } +} diff --git a/EasyInteractive/IInteractable.Extension.cs.meta b/EasyInteractive/IInteractable.Extension.cs.meta new file mode 100644 index 0000000..394cdca --- /dev/null +++ b/EasyInteractive/IInteractable.Extension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e84fea0140853814fbe4f015b0ba58c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: