From f8878387f89c3691588fcba8b974e0d369fe24d0 Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Thu, 3 Apr 2025 15:41:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EA=B0=84=EC=84=AD=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EB=A6=AC=ED=8E=99=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/0.22.7.unity | 65 +++++++++++++++++++ .../CreateInterferedObjectButtonCommand.cs | 30 +++++++++ ...reateInterferedObjectButtonCommand.cs.meta | 2 + .../Studio/AssetTool/CustomAssetConnector.cs | 8 ++- .../AssetTool/CustomAssetRenderObject.cs | 8 +++ .../Scripts/Studio/Managers/EventConnector.cs | 6 +- .../Managers/InterferedObjectManager.cs | 39 +++++++++++ .../Managers/InterferedObjectManager.cs.meta | 2 + .../Scripts/Studio/TwinObject/TwinObject.cs | 20 ------ .../UI/Elements/UI_InterferedObjectButton.cs | 1 + .../UI/Panel/Panel_InterferedObjectList.cs | 23 ++----- 11 files changed, 163 insertions(+), 41 deletions(-) create mode 100644 Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs create mode 100644 Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs.meta create mode 100644 Assets/Scripts/Studio/Managers/InterferedObjectManager.cs create mode 100644 Assets/Scripts/Studio/Managers/InterferedObjectManager.cs.meta diff --git a/Assets/Scenes/0.22.7.unity b/Assets/Scenes/0.22.7.unity index 044ef10b..9bbd4603 100644 --- a/Assets/Scenes/0.22.7.unity +++ b/Assets/Scenes/0.22.7.unity @@ -369,6 +369,50 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 157621255} m_CullTransparentMesh: 0 +--- !u!1 &183140327 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 183140328} + - component: {fileID: 183140329} + m_Layer: 0 + m_Name: InterferedObjectManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &183140328 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183140327} + serializedVersion: 2 + 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: 1093055756} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &183140329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183140327} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0c728344b2bbf5746b1a41daa8ff51b0, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &205918190 GameObject: m_ObjectHideFlags: 0 @@ -4121,6 +4165,26 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 4062748835041242030, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4062748835041242030, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4062748835041242030, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5808496954263173159, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5808496954263173159, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7484356029459005624, guid: 3335bcff08be47a4baa17f7fde07b24e, type: 3} propertyPath: m_Name value: Panel_AssetLibrary @@ -4258,6 +4322,7 @@ Transform: - {fileID: 538683123} - {fileID: 617235297} - {fileID: 1801579273} + - {fileID: 183140328} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1096619401 diff --git a/Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs b/Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs new file mode 100644 index 00000000..554111e7 --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using XED.Asset; +using XED.Command; + +namespace XED.Command +{ + public class CreateInterferedObjectButtonCommand : IReversibleCommand + { + public CreateInterferedObjectButtonCommand() + { + + } + + public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } + + public bool CanExecute() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + } + + public void Undo() + { + + } + } +} diff --git a/Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs.meta b/Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs.meta new file mode 100644 index 00000000..9c54c27b --- /dev/null +++ b/Assets/Scripts/Studio/AssetTool/CreateInterferedObjectButtonCommand.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 57aaa2e5b1c74a74b955b7cdc045e483 \ No newline at end of file diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs index 6becb919..e88ba36a 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs @@ -37,6 +37,8 @@ namespace XED.Asset public CustomAssetDataHandler assetDataHandler; public CustomAssetEventHandler assetEventHandler; + InterferedObjectManager interferedObjectManager; + ProjectManager projectManager; void Awake() { @@ -44,8 +46,8 @@ namespace XED.Asset renderObjectHandler = FindFirstObjectByType(); assetDataHandler = new CustomAssetDataHandler(this); assetEventHandler = new CustomAssetEventHandler(this); - projectManager = FindSingle(); - + projectManager = FindSingle(); + interferedObjectManager = FindSingle(); } void Start() { @@ -142,6 +144,8 @@ namespace XED.Asset } selectedItem = Instantiate(renderObjectPrefab); selectRenderObject = selectedItem.GetComponent(); + selectRenderObject.OnOverlabBegin += interferedObjectManager.AddInterferedPair; + selectRenderObject.OnOverlabEnd += interferedObjectManager.RemoveInterferedPair; selectRenderObject.instantiateObject = selectedAssetData.InstantiateLoadedObject; selectRenderObject.getBounds = selectedAssetData.GetCombinedBoundary; selectRenderObject.CreateRenderObject(); diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetRenderObject.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetRenderObject.cs index eb569dca..746b1f02 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetRenderObject.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetRenderObject.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.Contracts; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; @@ -28,6 +29,9 @@ namespace XED.Util LayerMask twinObjectMask; + public event Action OnOverlabBegin; + public event Action OnOverlabEnd; + private void Awake() { objectRenderer = GetComponentInChildren(); @@ -67,6 +71,8 @@ namespace XED.Util } Show(); } + + OnOverlabBegin?.Invoke(GetComponent(), other.GetComponent()); } private void OnTriggerExit(Collider other) { @@ -83,6 +89,8 @@ namespace XED.Util Hide(); } } + + OnOverlabEnd?.Invoke(GetComponent(), other.GetComponent()); } public void OnPointerEnter(PointerEventData eventData) { diff --git a/Assets/Scripts/Studio/Managers/EventConnector.cs b/Assets/Scripts/Studio/Managers/EventConnector.cs index e7f7fabf..7c37f191 100644 --- a/Assets/Scripts/Studio/Managers/EventConnector.cs +++ b/Assets/Scripts/Studio/Managers/EventConnector.cs @@ -37,7 +37,9 @@ namespace XED.Manage FBXFileManager saveLoadFBXData = customAssetConnector.saveLoadFBXData; GameObject componentWindow = canvas_Popup.panel_hierarchy.gameObject; GameObject interferedobjectlistWindow = canvas_Popup.panel_interferedobjectlist.gameObject; - + InterferedObjectManager interferedObjectManager = FindSingle(); + + UIConnection(); StatusConnection(); ManagerConnection(); @@ -60,6 +62,8 @@ namespace XED.Manage saveLoadFBXData.onBeginLoadAsset += (() => assetWindow.SetActive(true)); canvas_Popup.panel_objectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged; + interferedObjectManager.OnObjectsOverlapBegin += canvas_Popup.panel_interferedobjectlist.CreateContentButton; + interferedObjectManager.OnObjectsOverlapEnd += canvas_Popup.panel_interferedobjectlist.RemoveContentButton; agvNodeManager.onNodeConnectionAdded += agvNodeLinkManager.AddLine; agvNodeManager.onNodeConnectionUpdated += agvNodeLinkManager.UpdateLine; diff --git a/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs b/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs new file mode 100644 index 00000000..95c2eb24 --- /dev/null +++ b/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using TriLibCore.Interfaces; +using UnityEngine; +using XED.Util; +using XRLib; + +namespace XED +{ + public class InterferedObjectManager : MonoBehaviour, ISingle + { + HashSet<(TwinObject, TwinObject)> createdPairs = new(); + + public event Action<(TwinObject, TwinObject)> OnObjectsOverlapBegin; + public event Action<(TwinObject, TwinObject)> OnObjectsOverlapEnd; + + public void AddInterferedPair(TwinObject obj1, TwinObject obj2) + { + var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1); + + if (createdPairs.Contains(pair)) + return; + + createdPairs.Add(pair); + OnObjectsOverlapBegin?.Invoke(pair); + } + + public void RemoveInterferedPair(TwinObject obj1, TwinObject obj2) + { + var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1); + + if (!createdPairs.Contains(pair)) + return; + + createdPairs.Remove(pair); + OnObjectsOverlapEnd?.Invoke(pair); + } + } +} diff --git a/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs.meta b/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs.meta new file mode 100644 index 00000000..dd3715fe --- /dev/null +++ b/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0c728344b2bbf5746b1a41daa8ff51b0 \ No newline at end of file diff --git a/Assets/Scripts/Studio/TwinObject/TwinObject.cs b/Assets/Scripts/Studio/TwinObject/TwinObject.cs index b5491694..217334e6 100644 --- a/Assets/Scripts/Studio/TwinObject/TwinObject.cs +++ b/Assets/Scripts/Studio/TwinObject/TwinObject.cs @@ -20,16 +20,12 @@ namespace XED [PropertyVisible, Tooltip("µÎ ¹øÂ° info")] public bool IsInteractible; - Panel_InterferedObjectList panel_InterferedObjectList; - public override void AfterAwake() { IsDisplayable = true; IsInteractible = true; physics.Init(this); metaData.Init(this); - - panel_InterferedObjectList = FindSingle(); } public void Binding(IEntity entity) @@ -64,21 +60,5 @@ namespace XED { return JsonConvert.SerializeObject(entity); } - - private void OnTriggerEnter(Collider other) - { - if (!other.TryGetComponent(out TwinObject contracter)) - return; - - panel_InterferedObjectList.CreateContentButton(this, contracter); - } - - private void OnTriggerExit(Collider other) - { - if (!other.TryGetComponent(out TwinObject contracter)) - return; - - panel_InterferedObjectList.RemoveContentButton(this, contracter); - } } } \ No newline at end of file diff --git a/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs b/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs index 2b91d17f..4620dd17 100644 --- a/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs +++ b/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs @@ -2,6 +2,7 @@ using System; using TMPro; using UnityEngine; using UnityEngine.UI; +using XED.Util; using XRLib.UI; namespace XED.UI diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs b/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs index 22ae7f90..fe874b59 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs @@ -1,18 +1,18 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; +using XED.Util; using XRLib; using XRLib.UI; namespace XED.UI { - public class Panel_InterferedObjectList : PanelBase, ISingle + public class Panel_InterferedObjectList : PanelBase { Button Button_Close; RectTransform content; GameObject buttonPrefab; - HashSet<(TwinObject, TwinObject)> createdPairs = new(); Dictionary<(TwinObject, TwinObject), UI_InterferedObjectButton> createdButtons = new(); public override void AfterAwake() @@ -20,31 +20,18 @@ namespace XED.UI Button_Close.onClick.AddListener(OnClickClose); content = GetComponentInChildren().content; buttonPrefab = Resources.Load("Prefabs/UI/PRF_InterferedObjectButton"); - } - public void CreateContentButton(TwinObject obj1, TwinObject obj2) + public void CreateContentButton((TwinObject, TwinObject) pair) { - var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1); - - if (createdPairs.Contains(pair)) - return; - var newButton = Instantiate(buttonPrefab, content).GetComponent(); - createdPairs.Add(pair); createdButtons.Add(pair, newButton); - newButton.Initialize(obj1, obj2); + newButton.Initialize(pair.Item1, pair.Item2); } - public void RemoveContentButton(TwinObject obj1, TwinObject obj2) + public void RemoveContentButton((TwinObject, TwinObject) pair) { - var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1); - - if (!createdPairs.Contains(pair)) - return; - Destroy(createdButtons[pair].gameObject); - createdPairs.Remove(pair); createdButtons.Remove(pair); } From 98d2b9cc959da68f34a540acd53d0dbef41994e4 Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Thu, 3 Apr 2025 15:45:50 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Studio/Managers/EventConnector.cs | 4 ++-- .../Studio/Managers/InterferedObjectManager.cs | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Assets/Scripts/Studio/Managers/EventConnector.cs b/Assets/Scripts/Studio/Managers/EventConnector.cs index 7c37f191..7c6a141c 100644 --- a/Assets/Scripts/Studio/Managers/EventConnector.cs +++ b/Assets/Scripts/Studio/Managers/EventConnector.cs @@ -62,8 +62,8 @@ namespace XED.Manage saveLoadFBXData.onBeginLoadAsset += (() => assetWindow.SetActive(true)); canvas_Popup.panel_objectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged; - interferedObjectManager.OnObjectsOverlapBegin += canvas_Popup.panel_interferedobjectlist.CreateContentButton; - interferedObjectManager.OnObjectsOverlapEnd += canvas_Popup.panel_interferedobjectlist.RemoveContentButton; + interferedObjectManager.OnAddInterferedPair += canvas_Popup.panel_interferedobjectlist.CreateContentButton; + interferedObjectManager.OnRemoveInterferedPair += canvas_Popup.panel_interferedobjectlist.RemoveContentButton; agvNodeManager.onNodeConnectionAdded += agvNodeLinkManager.AddLine; agvNodeManager.onNodeConnectionUpdated += agvNodeLinkManager.UpdateLine; diff --git a/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs b/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs index 95c2eb24..5332da73 100644 --- a/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs +++ b/Assets/Scripts/Studio/Managers/InterferedObjectManager.cs @@ -9,31 +9,31 @@ namespace XED { public class InterferedObjectManager : MonoBehaviour, ISingle { - HashSet<(TwinObject, TwinObject)> createdPairs = new(); + HashSet<(TwinObject, TwinObject)> interferedPairs = new(); - public event Action<(TwinObject, TwinObject)> OnObjectsOverlapBegin; - public event Action<(TwinObject, TwinObject)> OnObjectsOverlapEnd; + public event Action<(TwinObject, TwinObject)> OnAddInterferedPair; + public event Action<(TwinObject, TwinObject)> OnRemoveInterferedPair; public void AddInterferedPair(TwinObject obj1, TwinObject obj2) { var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1); - if (createdPairs.Contains(pair)) + if (interferedPairs.Contains(pair)) return; - createdPairs.Add(pair); - OnObjectsOverlapBegin?.Invoke(pair); + interferedPairs.Add(pair); + OnAddInterferedPair?.Invoke(pair); } public void RemoveInterferedPair(TwinObject obj1, TwinObject obj2) { var pair = obj1.GetInstanceID() < obj2.GetInstanceID() ? (obj1, obj2) : (obj2, obj1); - if (!createdPairs.Contains(pair)) + if (!interferedPairs.Contains(pair)) return; - createdPairs.Remove(pair); - OnObjectsOverlapEnd?.Invoke(pair); + interferedPairs.Remove(pair); + OnRemoveInterferedPair?.Invoke(pair); } } }