Merge pull request 'CopyObject Undo/Redo 오류' (#221) from pgd/20250721_1 into main

Reviewed-on: http://220.90.135.190:3000/UVCXR/Studio/pulls/221
This commit was merged in pull request #221.
This commit is contained in:
pgd
2025-07-23 11:01:31 +09:00
5 changed files with 163 additions and 24 deletions

View File

@@ -2458,6 +2458,7 @@ RectTransform:
- {fileID: 1639318484}
- {fileID: 2010909997}
- {fileID: 18479049}
- {fileID: 648889522}
m_Father: {fileID: 1981809316}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -2511,6 +2512,7 @@ MonoBehaviour:
panel_toolbar: {fileID: 0}
panel_dataconnectmodal: {fileID: 0}
panel_alarmconnectmodal: {fileID: 0}
panel_toastmessage: {fileID: 0}
--- !u!114 &545811783
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -2848,6 +2850,11 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 68fe65091b9346d4d803044314a62d23, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!224 &648889522 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
m_PrefabInstance: {fileID: 1632293947}
m_PrefabAsset: {fileID: 0}
--- !u!1 &659421206
GameObject:
m_ObjectHideFlags: 0
@@ -8632,6 +8639,107 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7ba136ec400eea8498140d9abaa63da5, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &1632293947
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 545811781}
m_Modifications:
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1985167945211234460, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2164931036245486078, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_Name
value: Panel_ToastMessage
objectReference: {fileID: 0}
- target: {fileID: 2164931036245486078, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: e9508decb91c2994f92851c5c4315f57, type: 3}
--- !u!1001 &1639318483
PrefabInstance:
m_ObjectHideFlags: 0

View File

@@ -158,7 +158,6 @@ namespace Studio.AssetTool
ManagerHub.instance.Get<CustomAssetConnector>().OnDeselectAll();
}
public void AddSelection(CustomAssetRenderObject item)
{
if (selectedRenderObjects.Any(x => x == item))
@@ -192,6 +191,7 @@ namespace Studio.AssetTool
public void RemoveSelection(CustomAssetRenderObject item)
{
Debug.Log("RemoveSelection");
item.Deselect();
selectedRenderObjects.Remove(item);
selectedGameObjects.Remove(item.gameObject);
@@ -352,12 +352,24 @@ namespace Studio.AssetTool
shortcutTable.Add(KeyCode.LeftControl, new Dictionary<KeyCode, Action>());
//shortcutTable[KeyCode.LeftShift].Add(KeyCode.C, SaveItemsToCopy);
//shortcutTable[KeyCode.LeftShift].Add(KeyCode.V, () => CommandInvoker.instance.Invoke(new CopyObjectCommand()));
shortcutTable[KeyCode.LeftControl].Add(KeyCode.D, () => CommandInvoker.instance.Invoke(new CopyObjectCommand()));
shortcutTable[KeyCode.LeftControl].Add(KeyCode.D, () =>
{
if (ManagerHub.instance.Get<RenderObjectHandler>().selectedRenderObjects.Count == 0)
return;
CommandInvoker.instance.Invoke(new CopyObjectCommand());
// CanvasManager.instance.GetCanvas<Canvas_Popup>().panel_toastmessage.ActivateMessage("Copy");
});
#else
shortcutTable.Add(KeyCode.LeftControl, new Dictionary<KeyCode, Action>());
//shortcutTable[KeyCode.LeftControl].Add(KeyCode.C, SaveItemsToCopy);
//shortcutTable[KeyCode.LeftControl].Add(KeyCode.V, () => CommandInvoker.instance.Invoke(new CopyObjectCommand()));
shortcutTable[KeyCode.LeftControl].Add(KeyCode.D, () => CommandInvoker.instance.Invoke(new CopyObjectCommand()));
shortcutTable[KeyCode.LeftControl].Add(KeyCode.D, () =>
{
if (ManagerHub.instance.Get<RenderObjectHandler>().selectedRenderObjects.Count == 0)
return;
CommandInvoker.instance.Invoke(new CopyObjectCommand());
// CanvasManager.instance.GetCanvas<Canvas_Popup>().panel_toastmessage.ActivateMessage("Copy");
});
#endif
var handler = new InputHandler(getKeyActions, downKeyActions, upKeyActions, shortcutTable);

View File

@@ -44,8 +44,7 @@ namespace Studio.Command
connector.sceneDataContainer.sceneObjects.Remove(connectedAsset.renderObject);
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
renderObjectHandler.rtgController.SetGizmoTargetObjects(new List<GameObject>());
renderObjectHandler.DeselectAll();
renderObjectHandler.RemoveSelection(connectedAsset.renderObject);
}
}

View File

@@ -4,6 +4,8 @@ using Studio.AssetTool;
using Studio.HierarchyTree;
using Studio.Manage;
using Studio.Util;
using System.Drawing.Printing;
using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1;
namespace Studio.Command
{
@@ -11,6 +13,7 @@ namespace Studio.Command
{
private List<ConnectedAsset> copyList;
private CustomAssetConnector connector;
List<ConnectedAsset> copySources = new List<ConnectedAsset>();
public CopyObjectCommand()
{
@@ -28,19 +31,31 @@ namespace Studio.Command
{
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
connector = ManagerHub.instance.Get<CustomAssetConnector>();
//Debug.Log("cont " + renderObjectHandler.selectedRenderObjects.Count);
//if (renderObjectHandler.selectedRenderObjects.Count == 0)
// return;
if (renderObjectHandler.selectedRenderObjects.Count == 0)
return;
List<ConnectedAsset> copySources = new List<ConnectedAsset>();
copyList = new List<ConnectedAsset>();
for (int i = 0; i < renderObjectHandler.selectedRenderObjects.Count; i++)
if (copySources.Count == 0)
{
ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == renderObjectHandler.selectedRenderObjects[i]);
copySources.Add(searchAsset);
ConnectedAsset copyAsset = new ConnectedAsset();
copyList.Add(copyAsset);
connector.connectedAssets.Add(copyAsset);
for (int i = 0; i < renderObjectHandler.selectedRenderObjects.Count; i++)
{
ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.renderObject == renderObjectHandler.selectedRenderObjects[i]);
copySources.Add(searchAsset);
ConnectedAsset copyAsset = new ConnectedAsset();
copyList.Add(copyAsset);
connector.connectedAssets.Add(copyAsset);
}
}
else
{
for (int i = 0; i < copySources.Count; i++)
{
ConnectedAsset copyAsset = new ConnectedAsset();
copyList.Add(copyAsset);
connector.connectedAssets.Add(copyAsset);
}
}
for (int i = 0; i < copyList.Count; i++)
@@ -64,7 +79,7 @@ namespace Studio.Command
//copyAsset.renderObject.OnOverlabBegin += connector.interferedObjectManager.AddInterferedPair;
//copyAsset.renderObject.OnOverlabEnd += connector.interferedObjectManager.RemoveInterferedPair;
List <Transform> lastParent = new List<Transform>();
List<Transform> lastParent = new List<Transform>();
for (int j = 0; j < copyAsset.hierarchyItem.layerNum + 1; j++)
{
lastParent.Add(copyAsset.renderObject.transform);
@@ -119,8 +134,6 @@ namespace Studio.Command
searchAsset.renderObject.gameObject.SetActive(true);
}
}
CanvasManager.instance.GetCanvas<Canvas_Popup>().panel_toastmessage.ActivateMessage("Copy");
}
public void Undo()
@@ -131,6 +144,7 @@ namespace Studio.Command
connector.componentScrollView.RemoveItem(connectedAsset.hierarchyItem);
connectedAsset.assetData.RemoveTransform(connectedAsset.renderObject.transform);
connectedAsset.renderObject.gameObject.SetActive(false);
ManagerHub.instance.Get<RenderObjectHandler>().RemoveSelection(connectedAsset.renderObject);
List<HierarchyItem> childItems = connectedAsset.hierarchyItem.GetAll(true);
for (int k = 0; k < childItems.Count; k++)
@@ -138,15 +152,14 @@ namespace Studio.Command
ConnectedAsset searchAsset = connector.connectedAssets.Find((x) => x.hierarchyItem == childItems[k]);
searchAsset.assetData.RemoveTransform(searchAsset.renderObject.transform);
searchAsset.renderObject.gameObject.SetActive(false);
ManagerHub.instance.Get<RenderObjectHandler>().RemoveSelection(connectedAsset.renderObject);
}
}
ManagerHub.instance.Get<RenderObjectHandler>().DeselectAll();
//ManagerHub.instance.Get<RenderObjectHandler>().RemoveAllSelections();
var canvas = CanvasManager.instance.GetCanvas<Canvas_Popup>();
canvas.panel_dynamicobjectinfo.ResetObjectInfo();
//connector.onRemoveObjects?.Invoke();
connector.componentScrollView.DeselectAll();
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
renderObjectHandler.DeselectAll();
////connector.onRemoveObjects?.Invoke();
//connector.componentScrollView.DeselectAll();
}
}

View File

@@ -13,6 +13,8 @@ namespace Studio.UI
public Vector2 padding = new Vector2(20f, 10f);
private float delay = 1f;
IEnumerator coroutine;
public override void AfterAwake()
{
transform.SetAsLastSibling();
@@ -20,11 +22,16 @@ namespace Studio.UI
public void ActivateMessage(string message)
{
if (coroutine != null)
StopCoroutine(coroutine);
Text_Message.text = message;
UpdateBackgroundSize();
gameObject.SetActive(true);
StartCoroutine(AutoDeactivateAfterDelay());
coroutine = AutoDeactivateAfterDelay();
StartCoroutine(coroutine);
}
public void DeactivateMessage()