From f8878387f89c3691588fcba8b974e0d369fe24d0 Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Thu, 3 Apr 2025 15:41:42 +0900 Subject: [PATCH 1/6] =?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); } -- 2.48.1.windows.1 From 98d2b9cc959da68f34a540acd53d0dbef41994e4 Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Thu, 3 Apr 2025 15:45:50 +0900 Subject: [PATCH 2/6] =?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); } } } -- 2.48.1.windows.1 From 7005d76198913296d959b3bf0c9978cb5c6cfe6c Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Thu, 3 Apr 2025 18:24:58 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EA=B1=B0=EB=A6=AC=20=EC=B8=A1=EC=A0=95=20L?= =?UTF-8?q?inerenderer=20=EC=82=AC=EC=9A=A9=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Animations/ObjectDistanceLine.cs | 214 ++++++++++++++++++ Assets/Animations/ObjectDistanceLine.cs.meta | 2 + Assets/Prefabs/UI/Panel_ObjectDistance.prefab | 78 +++++++ .../Studio/AssetTool/CustomAssetConnector.cs | 3 +- .../UI/Elements/UI_InterferedObjectButton.cs | 2 - .../Studio/UI/Elements/UI_ObjectDistance.cs | 36 +++ .../UI/Elements/UI_ObjectDistance.cs.meta | 2 + .../UI/Panel/Panel_InterferedObjectList.cs | 7 +- .../Studio/UI/Panel/Panel_ObjectDistance.cs | 78 +++---- 9 files changed, 376 insertions(+), 46 deletions(-) create mode 100644 Assets/Animations/ObjectDistanceLine.cs create mode 100644 Assets/Animations/ObjectDistanceLine.cs.meta create mode 100644 Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs create mode 100644 Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs.meta diff --git a/Assets/Animations/ObjectDistanceLine.cs b/Assets/Animations/ObjectDistanceLine.cs new file mode 100644 index 00000000..50371b6e --- /dev/null +++ b/Assets/Animations/ObjectDistanceLine.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; + +namespace XED +{ + //TODO::areabox°¡ ¾Æ´Ï¶ó TwinObject¸¦ ´ë»óÀ¸·Î µ¿ÀÛÇϵµ·Ï ¼öÁ¤ + public class ObjectDistanceLine : MonoBehaviour + { + private Vector3 centerPoint = new(); + private Vector3[] edges = new Vector3[4]; + + private LineRenderer[] lineRenderers = new LineRenderer[4]; + private int[] distances = new int[4]; + private Vector3[] hits = new Vector3[4]; + [SerializeField] + private float thickness; + + private int rot; + private Dictionary dirTable = new(); + + TwinObject target; + HashSet targets = new(); + public event Action onTargetEvent; + public event Action onTargetMissing; + public event Action onLineUpdate; + public override void AfterAwake() + { + //var labelCanvas; + var lineMat = Resources.Load("Materials/Mat_LineRender"); + for (int i = 0; i < lineRenderers.Length; i++) + { + lineRenderers[i] = new GameObject("DistanceLine").AddComponent(); + lineRenderers[i].transform.SetParent(transform, true); + lineRenderers[i].material = lineMat; + lineRenderers[i].positionCount = 2; + lineRenderers[i].startWidth = thickness; + lineRenderers[i].endWidth = thickness; + } + //onTargetEvent += ()=>labelCanvas.panel_objectdistancelabellist.SetActive(true); + //onTargetMissing += ()=>labelCanvas.panel_objectdistancelabellist.SetActive(false); + //onLineUpdate += labelCanvas.panel_objectdistancelabellist.DistanceLabelsSetting; + } + + public void SetTarget(TwinObject target) + { + if (target is Wall || target is WallGroup) + return; + this.target = target; + targets.Add(target); + gameObject.SetActive(true); + onTargetEvent?.Invoke(); + } + + private void EdgePoints() + { + var size = target.physics.areabox.bounds.size; + edges[0] = centerPoint + EdgePointCalculate(-size.x, -size.z, centerPoint); + edges[1] = centerPoint + EdgePointCalculate(size.x, -size.z, centerPoint); + edges[2] = centerPoint + EdgePointCalculate(size.x, size.z, centerPoint); + edges[3] = centerPoint + EdgePointCalculate(-size.x, size.z, centerPoint); + } + + private void CenterPoints() + { + var size = target.physics.areabox.bounds.size; + edges[0] = centerPoint + EdgePointCalculate(-size.x, 0f, centerPoint); + edges[1] = centerPoint + EdgePointCalculate(size.x, 0f, centerPoint); + edges[2] = centerPoint + EdgePointCalculate(0f, -size.z, centerPoint); + edges[3] = centerPoint + EdgePointCalculate(0f, size.z, centerPoint); + } + private Vector3 EdgePointCalculate(float xValue, float zValue, Vector3 center) + { + //´ë°¢¼±ÀÇ ±æÀÌ, + //ÁßÁ¡±æÀÌ + var point = center + (new Vector3(xValue, 0, zValue) * 0.5f); + var length = Vector3.Distance(point, center); + var dir = (point - center).normalized * length; + //var pos = RotateVector3(dir, rot); + var pos = Quaternion.AngleAxis(rot, Vector3.up) * dir; + return pos; + } + + public void Off() + { + targets.Clear(); + onTargetMissing?.Invoke(); + } + + void LineRenderSetActive(bool isActive) + { + foreach(var line in lineRenderers) + { + line.enabled = isActive; + } + } + private void Update() + { + if (target == null || targets.Count >1) + { + Off(); + LineRenderSetActive(false); + return; + } + + //if (areabox == null) + // return; + //Distance°¡ 4°³ ¸ðµÎ 0À̸é return? + LineRenderSetActive(true); + rot = Mathf.RoundToInt(target.physics.areabox.transform.localEulerAngles.y); + centerPoint = new Vector3(target.physics.areabox.bounds.center.x, 0, target.physics.areabox.bounds.center.z); + + var angle = rot % 90f; + if (Mathf.Approximately(angle, 0f)) + CenterPoints(); + else + EdgePoints(); + + var xOrder = edges.OrderBy(l => l.x); + var zOrder = edges.OrderBy(l => l.z); + dirTable.Clear(); + dirTable.TryAdd(xOrder.ElementAt(0), Vector3.left); + dirTable.TryAdd(xOrder.ElementAt(3), Vector3.right); + dirTable.TryAdd(zOrder.ElementAt(0), Vector3.back); + dirTable.TryAdd(zOrder.ElementAt(3), Vector3.forward); + + for (int i = 0; i < edges.Length; i++) + { + //var dir = Dir(dirTable[edges[i]]); + var dir = dirTable[edges[i]]; + if (Physics.Raycast(edges[i], dir, out RaycastHit hit, Mathf.Infinity)) + { + hits[i] = hit.point; + } + else + { + hits[i] = edges[i]; + } + distances[i] = Mathf.RoundToInt(Vector3.Distance(hits[i], edges[i]) * 1000f); + + lineRenderers[i].SetPosition(0, edges[i]); + lineRenderers[i].SetPosition(1, hits[i]); + //3¹æÇâÁß Á¡Áß °¡Àå ªÀº°Å + + var pos = DistanceTextPos(edges[i], hits[i]); + if (Mathf.Abs(pos.y) == Mathf.Infinity || float.IsNaN(pos.y)) + continue; + onLineUpdate?.Invoke(pos, i, distances[i]); + } + } + + private Vector3 DistanceTextPos(Vector3 edge, Vector3 hit) + { + var x = Screen.width; + var y = Screen.height; + + var hitpoint = Camera.main.WorldToScreenPoint(hit); + var edgePoint = Camera.main.WorldToScreenPoint(edge); + + //Ä«¸Þ¶ó ³¡Á¡ edge¿Í hit »çÀÌ; + + //±â¿ï±â °¡Á®¿Â´Ù + var m = (hitpoint.y - edgePoint.y) / (hitpoint.x - edgePoint.x); + if (hitpoint.y > y) + { + var yPos = y; + var xPos = ((yPos - edgePoint.y) / m) + edgePoint.x; + hitpoint = new Vector3(xPos, yPos); + } + else if (hitpoint.y < 0) + { + var yPos = 0; + var xPos = ((yPos - edgePoint.y) / m) + edgePoint.x; + hitpoint = new Vector3(xPos, yPos); + } + + if (hitpoint.x > x) + { + var xPos = x; + var yPos = (m * (xPos - edgePoint.x)) + edgePoint.y; + hitpoint = new Vector3(xPos, yPos); + } + else if (hitpoint.x < 0) + { + var xPos = 0; + var yPos = (m * (xPos - edgePoint.x)) + edgePoint.y; + hitpoint = new Vector3(xPos, yPos); + } + + var center = (hitpoint + edgePoint) * 0.5f; + return center; + } + + void Gizmo() + { +#if UNITY_EDITOR +// for (int i = 0; i < edges.Length; ++i) +// { +// Gizmos.DrawSphere(edges[i].pos, 0.1f); +// } + +// for (int i = 0; i < hits.Length; ++i) +// { +// var dir = Dir(dirTable[edges[i]]); +// Handles.color = Color.yellow; +// Handles.DrawLine(edges[i].pos, hits[i], 1); +// Gizmos.DrawRay(edges[i].pos, dir * 10f); +// } +#endif + } + } +} diff --git a/Assets/Animations/ObjectDistanceLine.cs.meta b/Assets/Animations/ObjectDistanceLine.cs.meta new file mode 100644 index 00000000..0e0e9ba4 --- /dev/null +++ b/Assets/Animations/ObjectDistanceLine.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bfac6b2ea97a0274787f0bf0d086a76d \ No newline at end of file diff --git a/Assets/Prefabs/UI/Panel_ObjectDistance.prefab b/Assets/Prefabs/UI/Panel_ObjectDistance.prefab index e6e5e124..e0e6c4f8 100644 --- a/Assets/Prefabs/UI/Panel_ObjectDistance.prefab +++ b/Assets/Prefabs/UI/Panel_ObjectDistance.prefab @@ -211,6 +211,7 @@ GameObject: - component: {fileID: 7194822588214921878} - component: {fileID: 3097470657670304171} - component: {fileID: 5078274965939298063} + - component: {fileID: 7525121242705956087} m_Layer: 0 m_Name: Distance_right m_TagString: Untagged @@ -276,6 +277,18 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7525121242705956087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824088583583508963} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &2075515304005455769 GameObject: m_ObjectHideFlags: 0 @@ -695,6 +708,7 @@ GameObject: - component: {fileID: 1400843724585282578} - component: {fileID: 2061718949882192120} - component: {fileID: 4022013656138835912} + - component: {fileID: 4248166134889511194} m_Layer: 0 m_Name: Distance_left m_TagString: Untagged @@ -760,6 +774,18 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4248166134889511194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5461546370723553429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &7125163854521808529 GameObject: m_ObjectHideFlags: 0 @@ -771,6 +797,7 @@ GameObject: - component: {fileID: 6571488781575170805} - component: {fileID: 2889234264731888109} - component: {fileID: 5311912601517734047} + - component: {fileID: 9121733989934958637} m_Layer: 0 m_Name: Distance_back m_TagString: Untagged @@ -836,6 +863,18 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &9121733989934958637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7125163854521808529} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &7135956063028507155 GameObject: m_ObjectHideFlags: 0 @@ -847,6 +886,7 @@ GameObject: - component: {fileID: 18596219730868912} - component: {fileID: 7819340452723330143} - component: {fileID: 2211566357908769342} + - component: {fileID: 2122022514441583782} m_Layer: 0 m_Name: Distance_foward m_TagString: Untagged @@ -912,6 +952,18 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2122022514441583782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7135956063028507155} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &7452555945768904036 GameObject: m_ObjectHideFlags: 0 @@ -1195,6 +1247,7 @@ GameObject: - component: {fileID: 8107414850933273690} - component: {fileID: 9125045971131934483} - component: {fileID: 4508713210993668394} + - component: {fileID: 553392137018333697} m_Layer: 0 m_Name: Distance_up m_TagString: Untagged @@ -1260,6 +1313,18 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &553392137018333697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8057416366647402832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &8838398484417968805 GameObject: m_ObjectHideFlags: 0 @@ -1271,6 +1336,7 @@ GameObject: - component: {fileID: 6902250168712616153} - component: {fileID: 5227252712573134147} - component: {fileID: 1079209328243914300} + - component: {fileID: 4065362264821389741} m_Layer: 0 m_Name: Distance_down m_TagString: Untagged @@ -1336,3 +1402,15 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4065362264821389741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8838398484417968805} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f918e32db5c5042be45d171306ad14, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs index 0a0230b8..df78e997 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs @@ -48,7 +48,7 @@ namespace XED.Asset assetDataHandler = new CustomAssetDataHandler(this); assetEventHandler = new CustomAssetEventHandler(this); projectManager = FindSingle(); - interferedObjectManager = FindSingle(); + } void Start() { @@ -56,6 +56,7 @@ namespace XED.Asset assetScrollView = FindSingle().panel_assetlibrary.scrollView; componentScrollView = FindSingle().panel_hierarchy.scrollView; InterworkingDataScrollView = FindSingle().panel_interworkingdatalist.scrollView; + interferedObjectManager = FindSingle(); renderObjectPrefab = Resources.Load("Prefabs/PRF_RenderObject"); assetScrollRect.onDragBegin.AddListener(OnAssetSelected); diff --git a/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs b/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs index 4620dd17..f6db44a2 100644 --- a/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs +++ b/Assets/Scripts/Studio/UI/Elements/UI_InterferedObjectButton.cs @@ -23,8 +23,6 @@ namespace XED.UI { Button_Object1.onClick.AddListener(() => OnButtonClick(interferedTwinObject1)); Button_Object2.onClick.AddListener(() => OnButtonClick(interferedTwinObject2)); - - OnClickButton += FindSingle().MoveToTwinObjectPos; } public void Initialize(TwinObject obj1, TwinObject obj2) diff --git a/Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs b/Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs new file mode 100644 index 00000000..6034293d --- /dev/null +++ b/Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using TMPro; +using XRLib.UI; + +namespace XED +{ + public class UI_ObjectDistance : UIBase + { + TextMeshProUGUI m_text; + + private void Awake() + { + m_text = GetComponentInChildren(); + } + + public void SetText(float distance) + { + m_text.text = distance.ToString("F2"); + } + + public void SetPos(Vector3 movePoint) + { + Vector3 screenPoint = Camera.main.WorldToScreenPoint(movePoint); + transform.position = screenPoint; + + if (screenPoint.z > 0) + { + gameObject.SetActive(true); + } + else + { + gameObject.SetActive(false); + } + } + } +} diff --git a/Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs.meta b/Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs.meta new file mode 100644 index 00000000..78eb17b0 --- /dev/null +++ b/Assets/Scripts/Studio/UI/Elements/UI_ObjectDistance.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 39f918e32db5c5042be45d171306ad14 \ No newline at end of file diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs b/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs index fe874b59..887ad3ac 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_InterferedObjectList.cs @@ -15,18 +15,23 @@ namespace XED.UI Dictionary<(TwinObject, TwinObject), UI_InterferedObjectButton> createdButtons = new(); + CameraManager cameraManager; + public override void AfterAwake() { Button_Close.onClick.AddListener(OnClickClose); content = GetComponentInChildren().content; buttonPrefab = Resources.Load("Prefabs/UI/PRF_InterferedObjectButton"); + + cameraManager = FindSingle(); } public void CreateContentButton((TwinObject, TwinObject) pair) { var newButton = Instantiate(buttonPrefab, content).GetComponent(); - createdButtons.Add(pair, newButton); + newButton.OnClickButton += cameraManager.MoveToTwinObjectPos; newButton.Initialize(pair.Item1, pair.Item2); + createdButtons.Add(pair, newButton); } public void RemoveContentButton((TwinObject, TwinObject) pair) diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs b/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs index c304c690..5791e0f3 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs @@ -10,16 +10,10 @@ namespace XED.UI { public class Panel_ObjectDistance : PanelBase, ISingle { - GameObject linePrefab; + UI_ObjectDistance[] ui_ObjectDistances; + LineRenderer[] lineRenderers = new LineRenderer[6]; + Dictionary distanceLines = new(); - RectTransform Distance_up; - RectTransform Distance_down; - RectTransform Distance_left; - RectTransform Distance_right; - RectTransform Distance_foward; - RectTransform Distance_back; - - Dictionary distanceLines = new(); [SerializeField] float lineThickness = 1; @@ -27,14 +21,21 @@ namespace XED.UI public override void AfterAwake() { - linePrefab = Resources.Load("Prefabs/PRF_ObjectDistanceLine"); + ui_ObjectDistances = GetComponentsInChildren(true); - distanceLines.Add(Distance_up, Instantiate(linePrefab)); - distanceLines.Add(Distance_down, Instantiate(linePrefab)); - distanceLines.Add(Distance_left, Instantiate(linePrefab)); - distanceLines.Add(Distance_right, Instantiate(linePrefab)); - distanceLines.Add(Distance_foward, Instantiate(linePrefab)); - distanceLines.Add(Distance_back, Instantiate(linePrefab)); + var lineMat = Resources.Load("Materials/Mat_LineRender"); + + for (int i = 0; i < lineRenderers.Length; i++) + { + lineRenderers[i] = new GameObject("DistanceLine").AddComponent(); + lineRenderers[i].transform.SetParent(transform, true); + lineRenderers[i].material = lineMat; + lineRenderers[i].positionCount = 2; + lineRenderers[i].startWidth = lineThickness; + lineRenderers[i].endWidth = lineThickness; + + distanceLines.Add(ui_ObjectDistances[i], lineRenderers[i]); + } DeactivateAll(); } @@ -48,12 +49,12 @@ namespace XED.UI return; } - UpdateDistance(Distance_up, Vector3.up); - UpdateDistance(Distance_down, Vector3.down); - UpdateDistance(Distance_left, Vector3.left); - UpdateDistance(Distance_right, Vector3.right); - UpdateDistance(Distance_foward, Vector3.forward); - UpdateDistance(Distance_back, Vector3.back); + UpdateDistance(ui_ObjectDistances[0], Vector3.up); + UpdateDistance(ui_ObjectDistances[1], Vector3.down); + UpdateDistance(ui_ObjectDistances[2], Vector3.left); + UpdateDistance(ui_ObjectDistances[3], Vector3.right); + UpdateDistance(ui_ObjectDistances[4], Vector3.forward); + UpdateDistance(ui_ObjectDistances[5], Vector3.back); } public void SelectObjectFromCreate(CustomAssetRenderObject obj) @@ -74,42 +75,35 @@ namespace XED.UI void DeactivateAll() { - foreach (var rect in distanceLines.Keys) + foreach (var distanceUI in distanceLines.Keys) { - rect.gameObject.SetActive(false); - distanceLines[rect].gameObject.SetActive(false); + distanceUI.gameObject.SetActive(false); + distanceLines[distanceUI].enabled = false; } } - void UpdateDistance(RectTransform rect, Vector3 direction) + void UpdateDistance(UI_ObjectDistance distanceUI, Vector3 direction) { RaycastHit hit = selectedObject.GetObjectHit(direction); if (hit.collider != null) { float distance = hit.distance; - rect.GetComponentInChildren().text = distance.ToString("F2"); - Vector3 hitPoint = hit.point; Vector3 distanceCenterPoint = hitPoint - (direction * distance / 2); - Vector3 screenPoint = Camera.main.WorldToScreenPoint(distanceCenterPoint); - rect.transform.position = screenPoint; - if (screenPoint.z > 0) - { - rect.gameObject.SetActive(true); - } - else - { - rect.gameObject.SetActive(false); - } - SetLineLength(distanceLines[rect], distanceCenterPoint, direction, distance); - distanceLines[rect].SetActive(true); + distanceUI.SetText(distance); + distanceUI.SetPos(distanceCenterPoint); + + //SetLineLength(distanceLines[distanceUI], distanceCenterPoint, direction, distance); + distanceLines[distanceUI].SetPosition(0, hitPoint); + distanceLines[distanceUI].SetPosition(1, hitPoint - (direction * distance)); + distanceLines[distanceUI].enabled = true; } else { - rect.gameObject.SetActive(false); - distanceLines[rect].SetActive(false); + distanceUI.gameObject.SetActive(false); + distanceLines[distanceUI].enabled = false; return; } } -- 2.48.1.windows.1 From 9ac2fa38076f418168516e6ce4be99cf2f270604 Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Fri, 4 Apr 2025 12:19:58 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=ED=81=B4=EB=A6=AD=EB=90=9C=20=EC=98=A4?= =?UTF-8?q?=EB=B8=8C=EC=A0=9D=ED=8A=B8=EA=B0=80=20=EC=97=86=EC=9D=84?= =?UTF-8?q?=EB=95=8C,=20=EC=98=A4=EB=B8=8C=EC=A0=9D=ED=8A=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EB=90=90=EC=9D=84=20=EB=95=8C=20null=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Studio/Managers/EventConnector.cs | 2 ++ Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Studio/Managers/EventConnector.cs b/Assets/Scripts/Studio/Managers/EventConnector.cs index 746863b2..b4d3aab7 100644 --- a/Assets/Scripts/Studio/Managers/EventConnector.cs +++ b/Assets/Scripts/Studio/Managers/EventConnector.cs @@ -49,6 +49,7 @@ namespace XED.Manage void ManagerConnection() { customAssetConnector.onRemoveObjects += renderObjectHandler.DeselectAll; + customAssetConnector.onRemoveObjects += canvas_Popup.panel_objectdistance.SetSelecetedObjectToNull; customAssetConnector.onSelectObjects += ((name, objects) => { canvas_Popup.panel_objectinfo.gameObject.SetActive(true); }); customAssetConnector.onSelectObjects += canvas_Popup.panel_objectinfo.SetObjectInfo; customAssetConnector.onSelectObjects += canvas_Popup.panel_objectdistance.SelectObjectFromClick; @@ -56,6 +57,7 @@ namespace XED.Manage customAssetConnector.onDeselectObjects += (() => { canvas_Popup.panel_objectinfo.gameObject.SetActive(false); }); renderObjectHandler.onDeselectAll += canvas_Popup.panel_objectinfo.ResetObjectInfo; + renderObjectHandler.onDeselectAll += canvas_Popup.panel_objectdistance.SetSelecetedObjectToNull; renderObjectHandler.onTransformChanged += canvas_Popup.panel_objectinfo.OnTransformChanged; renderObjectHandler.onDragBegin += canvas_DragArea.panel_draghandler.OnBeginDrag; renderObjectHandler.onDragEnd += canvas_DragArea.panel_draghandler.OnEndDrag; diff --git a/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs b/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs index 5791e0f3..4c32cace 100644 --- a/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs +++ b/Assets/Scripts/Studio/UI/Panel/Panel_ObjectDistance.cs @@ -66,13 +66,18 @@ namespace XED.UI { if (objects.Count != 1) { - selectedObject = null; + SetSelecetedObjectToNull(); return; } selectedObject = objects[0].GetComponent(); } + public void SetSelecetedObjectToNull() + { + selectedObject = null; + } + void DeactivateAll() { foreach (var distanceUI in distanceLines.Keys) -- 2.48.1.windows.1 From 6e1fb789663502187b7a00ffbda7dc99d529b8b1 Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Mon, 7 Apr 2025 10:42:59 +0900 Subject: [PATCH 5/6] =?UTF-8?q?Select=20=EB=A6=AC=ED=8E=99=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs | 5 ++++- .../Scripts/Studio/AssetTool/CustomAssetRenderObject.cs | 3 ++- Assets/Scripts/Studio/Command/CopyObjectCommand.cs | 8 +++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs index df78e997..fc43658f 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetConnector.cs @@ -19,6 +19,7 @@ namespace XED.Asset public CustomScrollRect assetScrollRect; public PooledScrollView componentScrollView; public PooledScrollView InterworkingDataScrollView; + public Panel_ObjectDistance panel_ObjectDistance; public GameObject renderObjectPrefab; public float objectShowDistance = 1000.0f; @@ -38,7 +39,7 @@ namespace XED.Asset public CustomAssetDataHandler assetDataHandler; public CustomAssetEventHandler assetEventHandler; - InterferedObjectManager interferedObjectManager; + public InterferedObjectManager interferedObjectManager; ProjectManager projectManager; void Awake() @@ -56,6 +57,7 @@ namespace XED.Asset assetScrollView = FindSingle().panel_assetlibrary.scrollView; componentScrollView = FindSingle().panel_hierarchy.scrollView; InterworkingDataScrollView = FindSingle().panel_interworkingdatalist.scrollView; + panel_ObjectDistance = FindSingle().panel_objectdistance; interferedObjectManager = FindSingle(); renderObjectPrefab = Resources.Load("Prefabs/PRF_RenderObject"); @@ -146,6 +148,7 @@ namespace XED.Asset selectRenderObject = selectedItem.GetComponent(); selectRenderObject.OnOverlabBegin += interferedObjectManager.AddInterferedPair; selectRenderObject.OnOverlabEnd += interferedObjectManager.RemoveInterferedPair; + selectRenderObject.OnSelected += panel_ObjectDistance.SelectObjectFromCreate; 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 746b1f02..95018510 100644 --- a/Assets/Scripts/Studio/AssetTool/CustomAssetRenderObject.cs +++ b/Assets/Scripts/Studio/AssetTool/CustomAssetRenderObject.cs @@ -31,6 +31,7 @@ namespace XED.Util public event Action OnOverlabBegin; public event Action OnOverlabEnd; + public event Action OnSelected; private void Awake() { @@ -189,7 +190,7 @@ namespace XED.Util public void Select() { //ResizeBoundary(); - FindSingle().SelectObjectFromCreate(this); + OnSelected?.Invoke(this); isSelected = true; objectRenderer.material = matCubeSelected; Show(); diff --git a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs b/Assets/Scripts/Studio/Command/CopyObjectCommand.cs index a3fd0f4c..bb8239f1 100644 --- a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs +++ b/Assets/Scripts/Studio/Command/CopyObjectCommand.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UnityEngine; using XED.Asset; using XED.HierarchyTree; +using XED.UI; using XED.Util; namespace XED.Command @@ -45,8 +46,10 @@ namespace XED.Command copyAsset.renderObject.transform.position = copySource.renderObject.transform.position; copyAsset.renderObject.transform.rotation = copySource.renderObject.transform.rotation; copyAsset.renderObject.transform.localScale = copySource.renderObject.transform.localScale; + copyAsset.renderObject.OnOverlabBegin += connector.interferedObjectManager.AddInterferedPair; + copyAsset.renderObject.OnOverlabEnd += connector.interferedObjectManager.RemoveInterferedPair; - List lastParent = new List(); + List lastParent = new List(); for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++) { lastParent.Add(copyAsset.renderObject.transform); @@ -70,6 +73,9 @@ namespace XED.Command childAsset.renderObject.transform.rotation = childSource.renderObject.transform.rotation; childAsset.renderObject.transform.localScale = childSource.renderObject.transform.localScale; childAsset.renderObject.transform.parent = lastParent[childAsset.hierarchyItem.layerNum - 1]; + childAsset.renderObject.OnOverlabBegin += connector.interferedObjectManager.AddInterferedPair; + childAsset.renderObject.OnOverlabEnd += connector.interferedObjectManager.RemoveInterferedPair; + if (lastParent.Count <= childAsset.hierarchyItem.layerNum) { lastParent.Add(childAsset.renderObject.transform); -- 2.48.1.windows.1 From ea774416f8b893384b0aa290420aadb8d25b2d4f Mon Sep 17 00:00:00 2001 From: jmaniuvc Date: Mon, 7 Apr 2025 14:36:31 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=EB=B3=B5=EC=82=AC=20=EC=8B=9C=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=20=EC=98=A4=EB=B8=8C=EC=A0=9D=ED=8A=B8=20Render=20?= =?UTF-8?q?=EB=8B=A4=EB=A5=B4=EA=B2=8C=20=EB=B0=94=EB=80=8C=EB=8A=94=20?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Studio/Command/CopyObjectCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs b/Assets/Scripts/Studio/Command/CopyObjectCommand.cs index bb8239f1..bcb7a7fc 100644 --- a/Assets/Scripts/Studio/Command/CopyObjectCommand.cs +++ b/Assets/Scripts/Studio/Command/CopyObjectCommand.cs @@ -67,7 +67,7 @@ namespace XED.Command childAsset.renderObject = copyChildObject.GetComponent(); childAsset.renderObject.getBounds = childAsset.assetData.GetCombinedBoundary; childAsset.renderObject.onTransformChanged = childAsset.assetData.OnTransformDataChanged; - childAsset.renderObject.instantiateObject = copySource.assetData.InstantiateLoadedObject; + childAsset.renderObject.instantiateObject = childSource.assetData.InstantiateLoadedObject; childAsset.renderObject.CreateRenderObject(); childAsset.renderObject.transform.position = childSource.renderObject.transform.position; childAsset.renderObject.transform.rotation = childSource.renderObject.transform.rotation; -- 2.48.1.windows.1