5. LoadLocalTextureDataCommand 삭제

6. LoadLocalModelDataCommand 삭제
This commit is contained in:
wsh
2025-05-22 16:58:25 +09:00
parent a76df3c8a3
commit 2d3616b9ee
13 changed files with 152 additions and 193 deletions

View File

@@ -0,0 +1,11 @@
using Studio.AssetTool;
using System.Collections.Generic;
using UnityEngine;
namespace XED
{
public class SceneDataContainer : MonoBehaviour
{
public List<CustomAssetRenderObject> sceneObjects = new();
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 89a58e6aed073fe4188a7bb3580d5e08

View File

@@ -119,6 +119,50 @@ NavMeshSettings:
debug: debug:
m_Flags: 0 m_Flags: 0
m_NavMeshData: {fileID: 0} m_NavMeshData: {fileID: 0}
--- !u!1 &1155209
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1155210}
- component: {fileID: 1155211}
m_Layer: 0
m_Name: SceneDataContainer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1155210
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1155209}
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 &1155211
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1155209}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 89a58e6aed073fe4188a7bb3580d5e08, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!224 &110380560 stripped --- !u!224 &110380560 stripped
RectTransform: RectTransform:
m_CorrespondingSourceObject: {fileID: 1112357447546033534, guid: 86fac645f610e6c43a57c53dec3f6e48, type: 3} m_CorrespondingSourceObject: {fileID: 1112357447546033534, guid: 86fac645f610e6c43a57c53dec3f6e48, type: 3}
@@ -2971,6 +3015,7 @@ Transform:
- {fileID: 391151068} - {fileID: 391151068}
- {fileID: 294055731} - {fileID: 294055731}
- {fileID: 349372257} - {fileID: 349372257}
- {fileID: 1155210}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1093055757 --- !u!114 &1093055757

View File

@@ -12,6 +12,7 @@ using System;
using Studio.Core; using Studio.Core;
using System.Collections; using System.Collections;
using Studio.AssetLibraryTree; using Studio.AssetLibraryTree;
using XED;
namespace Studio.AssetTool namespace Studio.AssetTool
{ {
@@ -37,7 +38,7 @@ namespace Studio.AssetTool
public CustomAssetDataHandler assetDataHandler; public CustomAssetDataHandler assetDataHandler;
public CustomAssetEventHandler assetEventHandler; public CustomAssetEventHandler assetEventHandler;
public SceneDataContainer sceneDataContainer;
public CustomAssetConnector() public CustomAssetConnector()
{ {
assetDataHandler = new CustomAssetDataHandler(); assetDataHandler = new CustomAssetDataHandler();
@@ -46,26 +47,25 @@ namespace Studio.AssetTool
public override void Init() public override void Init()
{ {
//interferedObjectManager = ManagerHub.instance.Get<InterferedObjectManager>(); //interferedObjectManager = ManagerHub.instance.Get<InterferedObjectManager>();
renderObjectPrefab = Resources.Load<GameObject>("Prefabs/PRF_RenderObject");
sceneDataContainer= GameObject.FindAnyObjectByType<SceneDataContainer>();
assetScrollRect = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollRect; assetScrollRect = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollRect;
assetScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollView;
componentScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_hierarchy.scrollView;
panel_ObjectDistance = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectdistance;
InterworkingDataScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_interworkingdatalist.scrollView;
assetScrollRect.onDragBegin.AddListener(OnAssetSelected); assetScrollRect.onDragBegin.AddListener(OnAssetSelected);
assetScrollRect.onDragAndDrop.AddListener(OnAssetDropped); assetScrollRect.onDragAndDrop.AddListener(OnAssetDropped);
InterworkingDataScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_interworkingdatalist.scrollView;
InterworkingDataScrollView.onSelect.AddListener(assetEventHandler.OnSelectDataFromHierarchy);
assetScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollView;
assetScrollView.onSelect.AddListener(assetEventHandler.OnSelectAssetFromHierarchy); assetScrollView.onSelect.AddListener(assetEventHandler.OnSelectAssetFromHierarchy);
componentScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_hierarchy.scrollView;
componentScrollView.onSelect.AddListener(assetEventHandler.OnSelectObjectFromHierarchy);
componentScrollView.onParentChanged.AddListener(OnParentChanged); componentScrollView.onParentChanged.AddListener(OnParentChanged);
componentScrollView.onSelect.AddListener(assetEventHandler.OnSelectObjectFromHierarchy);
panel_ObjectDistance = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectdistance;
InterworkingDataScrollView.onSelect.AddListener(assetEventHandler.OnSelectDataFromHierarchy);
renderObjectPrefab = Resources.Load<GameObject>("Prefabs/PRF_RenderObject");
} }
IEnumerator ChangeSelectedAssetTransform() IEnumerator ChangeSelectedAssetTransform()
{ {
while (selectedAssetData != null) while (selectedAssetData != null)
@@ -112,7 +112,16 @@ namespace Studio.AssetTool
bool isPointerOutScrollRect = !assetScrollRect.IsPointerOverScrollRect(); bool isPointerOutScrollRect = !assetScrollRect.IsPointerOverScrollRect();
if (item != null && isPointerOutScrollRect) if (item != null && isPointerOutScrollRect)
{ {
CreateConnectedAsset(); ConnectedAsset connectedAsset = new ConnectedAsset
{
assetData = selectedAssetData,
hierarchyItem = componentScrollView.AddItem(selectedAssetData.assetName, selectedItem, HierarchyItemType.obj),
renderObject = selectRenderObject
};
connectedAsset.renderObject.onTransformChanged = connectedAsset.assetData.OnTransformDataChanged;
sceneDataContainer.sceneObjects.Add(connectedAsset.renderObject);
var command = new CreateConnectedAssetCommand(connectedAsset);
CommandInvoker.instance.Invoke(command);
} }
else else
{ {
@@ -125,18 +134,6 @@ namespace Studio.AssetTool
onAssetDropped?.Invoke(); onAssetDropped?.Invoke();
} }
void CreateConnectedAsset()
{
ConnectedAsset connectedAsset = new ConnectedAsset
{
assetData = selectedAssetData,
hierarchyItem = componentScrollView.AddItem(selectedAssetData.assetName, selectedItem, HierarchyItemType.obj),
renderObject = selectRenderObject
};
connectedAsset.renderObject.onTransformChanged = connectedAsset.assetData.OnTransformDataChanged;
var command = new CreateConnectedAssetCommand(connectedAsset, this);
CommandInvoker.instance.Invoke(command);
}
public void OnParentChanged(HierarchyItem parentItem, HierarchyItem childItem) public void OnParentChanged(HierarchyItem parentItem, HierarchyItem childItem)
{ {
ConnectedAsset parentAsset = connectedAssets.Find((x) => x.hierarchyItem == parentItem); ConnectedAsset parentAsset = connectedAssets.Find((x) => x.hierarchyItem == parentItem);

View File

@@ -8,15 +8,6 @@ namespace Studio.AssetTool
{ {
public class CustomAssetDataHandler public class CustomAssetDataHandler
{ {
public void OnLoadFbxFile(string objectName, string folderName, CustomAssetData assetData)
{
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
AssetLibraryItem parent = connector.assetScrollView.FindItem(folderName, AssetLibraryItemType.folder) ?? connector.assetScrollView.AddItem(folderName, null, AssetLibraryItemType.folder);
AssetLibraryItem item = connector.assetScrollView.AddItem(objectName, assetData.gameObject, AssetLibraryItemType.file, parent);
assetData.onLoadProgress.RemoveAllListeners();
assetData.onLoadProgress.AddListener((x) => item.onLoadProgress?.Invoke(x));
}
public void OnRemoveFbxFile(string objectName) public void OnRemoveFbxFile(string objectName)
{ {
var connector = ManagerHub.instance.Get<CustomAssetConnector>(); var connector = ManagerHub.instance.Get<CustomAssetConnector>();

View File

@@ -13,6 +13,7 @@ using Studio.AssetTool;
using Ookii.Dialogs; using Ookii.Dialogs;
using Studio.Command; using Studio.Command;
using Studio.Manage; using Studio.Manage;
using Studio.AssetLibraryTree;
namespace Studio.AssetTool namespace Studio.AssetTool
{ {
@@ -25,7 +26,6 @@ namespace Studio.AssetTool
public UnityEvent<string> onRemoveFbxFile; public UnityEvent<string> onRemoveFbxFile;
public SaveData saveData; public SaveData saveData;
private Queue<string> loadFilePath = new Queue<string>();
public SharedMaterial sharedMaterial; public SharedMaterial sharedMaterial;
private MessagePackFileManager<SaveData> messagePacker; private MessagePackFileManager<SaveData> messagePacker;
private bool isSaveTaskComplete = true; private bool isSaveTaskComplete = true;
@@ -146,11 +146,69 @@ namespace Studio.AssetTool
yield break; yield break;
} }
saveData = task.Result; saveData = task.Result;
CommandInvoker.instance.Invoke(new LoadLocalTextureDataCommand()); CoroutineRunner.instance.StartCoroutine(LoadDefaultModelDatas());
CommandInvoker.instance.Invoke(new LoadLocalModelDataCommand());
isLoadTaskComplete = true; isLoadTaskComplete = true;
} }
IEnumerator LoadDefaultModelDatas()
{
foreach (var tex in saveData.textureDatas)
{
sharedMaterial.AddTextureData(tex);
}
for (int i = 0; i < saveData.modelDatas.Length; i++)
{
var modelData = saveData.modelDatas[i];
string assetName = modelData.attributes.FirstOrDefault(x => x[0].Equals("assetName"))?[1];
if (dataRepo.TryGetDataFromName(assetName, out var p))
continue;
LoadSaveData(saveData, i);
yield return null;
}
}
void LoadSaveData(SaveData saveData, int index)
{
var modelData = saveData.modelDatas[index];
string assetName = modelData.attributes.FirstOrDefault(x => x[0].Equals("assetName"))?[1];
string folderName = modelData.attributes.FirstOrDefault(x => x[0].Equals("folderName"))?[1];
string createDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("createDate"))?[1];
string lastRevisionDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("lastRevisionDate"))?[1];
string uploadDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("uploadDate"))?[1];
string creator = modelData.attributes.FirstOrDefault(x => x[0].Equals("creator"))?[1];
string manager = modelData.attributes.FirstOrDefault(x => x[0].Equals("manager"))?[1];
Texture2D thumbnail = new Texture2D(1, 1);
thumbnail.LoadImage(saveData.thumbnailDatas[index].data);
GameObject newObject = new GameObject(assetName);
newObject.transform.parent = fbxAnchor;
CustomAssetData assetData = newObject.AddComponent<CustomAssetData>();
assetData.assetName = assetName;
assetData.folderName = folderName;
assetData.createDate = createDate;
assetData.LastRevisionDate = lastRevisionDate;
assetData.UploadDate = uploadDate;
assetData.Creator = creator;
assetData.Manager = manager;
assetData.loadedObject = modelData.LoadModelData(sharedMaterial);
assetData.thumbnail = thumbnail;
assetData.OnLoadComplete();
dataRepo.Add(assetData);
//listAssets.Add(assetData);
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
AssetLibraryItem parent = connector.assetScrollView.FindItem(folderName, AssetLibraryItemType.folder) ??
connector.assetScrollView.AddItem(folderName, null, AssetLibraryItemType.folder);
AssetLibraryItem item = connector.assetScrollView.AddItem(assetData.assetName, assetData.gameObject, AssetLibraryItemType.file, parent);
assetData.onLoadProgress.RemoveAllListeners();
assetData.onLoadProgress.AddListener((x) => item.onLoadProgress?.Invoke(x));
}
} }
} }

View File

@@ -1,16 +1,15 @@
using Studio.AssetTool; using Studio.AssetTool;
using Studio.Manage;
namespace Studio.Command namespace Studio.Command
{ {
public class CreateConnectedAssetCommand : IReversibleCommand public class CreateConnectedAssetCommand : IReversibleCommand
{ {
private ConnectedAsset connectedAsset; private ConnectedAsset connectedAsset;
private CustomAssetConnector connector;
public CreateConnectedAssetCommand(ConnectedAsset connectedAsset, CustomAssetConnector connector) public CreateConnectedAssetCommand(ConnectedAsset connectedAsset)
{ {
this.connectedAsset = connectedAsset; this.connectedAsset = connectedAsset;
this.connector = connector;
} }
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
@@ -21,6 +20,7 @@ namespace Studio.Command
public void Execute() public void Execute()
{ {
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
if (!connectedAsset.renderObject.gameObject.activeSelf) if (!connectedAsset.renderObject.gameObject.activeSelf)
{ {
connectedAsset.assetData.AddTransformToRender(connectedAsset.renderObject.transform); connectedAsset.assetData.AddTransformToRender(connectedAsset.renderObject.transform);
@@ -33,6 +33,7 @@ namespace Studio.Command
public void Undo() public void Undo()
{ {
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
connector.connectedAssets.Remove(connectedAsset); connector.connectedAssets.Remove(connectedAsset);
connectedAsset.assetData.RemoveTransform(connectedAsset.renderObject.transform); connectedAsset.assetData.RemoveTransform(connectedAsset.renderObject.transform);
connectedAsset.renderObject.gameObject.SetActive(false); connectedAsset.renderObject.gameObject.SetActive(false);

View File

@@ -1,89 +0,0 @@
using System.Collections;
using System.Linq;
using UnityEngine;
using Studio.AssetTool;
using Studio.Manage;
using Studio.Repositories;
using Studio.Util;
namespace Studio.Command
{
public class LoadLocalModelDataCommand : IIrreversibleCommand
{
private FBXFileManager fbxFileManager;
private float loadTime = 0f;
public LoadLocalModelDataCommand()
{
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
for (int i = 0; i < fbxFileManager.saveData.modelDatas.Length; i++)
{
CoroutineRunner.instance.StartCoroutine(LoadModelData(i));
}
}
IEnumerator LoadModelData(int index)
{
if (!LoadSaveData(fbxFileManager.saveData, index))
yield break;
loadTime += Time.deltaTime;
if (loadTime > 1f / 30f)
{
loadTime = 0f;
yield return null;
}
}
bool LoadSaveData(SaveData saveData, int index)
{
var modelData = saveData.modelDatas[index];
string assetName = modelData.attributes.FirstOrDefault(x => x[0].Equals("assetName"))?[1];
if (fbxFileManager.dataRepo.TryGetDataFromName(assetName, out var p))
return false;
string folderName = modelData.attributes.FirstOrDefault(x => x[0].Equals("folderName"))?[1];
string createDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("createDate"))?[1];
string lastRevisionDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("lastRevisionDate"))?[1];
string uploadDate = modelData.attributes.FirstOrDefault(x => x[0].Equals("uploadDate"))?[1];
string creator = modelData.attributes.FirstOrDefault(x => x[0].Equals("creator"))?[1];
string manager = modelData.attributes.FirstOrDefault(x => x[0].Equals("manager"))?[1];
Texture2D thumbnail = new Texture2D(1, 1);
thumbnail.LoadImage(saveData.thumbnailDatas[index].data);
GameObject newObject = new GameObject(assetName);
newObject.transform.parent = fbxFileManager.fbxAnchor;
CustomAssetData assetData = newObject.AddComponent<CustomAssetData>();
assetData.assetName = assetName;
assetData.folderName = folderName;
assetData.createDate = createDate;
assetData.LastRevisionDate = lastRevisionDate;
assetData.UploadDate = uploadDate;
assetData.Creator = creator;
assetData.Manager = manager;
assetData.loadedObject = modelData.LoadModelData(fbxFileManager.sharedMaterial);
assetData.thumbnail = thumbnail;
assetData.OnLoadComplete();
fbxFileManager.dataRepo.Add(assetData);
//listAssets.Add(assetData);
ManagerHub.instance.Get<CustomAssetConnector>().assetDataHandler.OnLoadFbxFile(assetData.assetName, assetData.folderName, assetData);
return true;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 34c7091e151c4654f80f16448c43f36d

View File

@@ -1,50 +0,0 @@
using System.Collections;
using UnityEngine;
using Studio.Manage;
using Studio.AssetTool;
namespace Studio.Command
{
public class LoadLocalTextureDataCommand : IIrreversibleCommand
{
private FBXFileManager fbxFileManager;
private float loadTime = 0f;
public LoadLocalTextureDataCommand()
{
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
foreach (var tex in fbxFileManager.saveData.textureDatas)
{
CoroutineRunner.instance.StartCoroutine(LoadTextureData(tex));
}
}
IEnumerator LoadTextureData(TextureData texData)
{
fbxFileManager.sharedMaterial.AddTextureData(texData);
loadTime += Time.deltaTime;
if (loadTime > 1f / 30f)
{
loadTime = 0f;
yield return null;
}
// yield return null;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 243104ea078b0364e811f6803ef3b3b2

View File

@@ -10,12 +10,6 @@ namespace Studio.Command
{ {
private List<ConnectedAsset> removeList = new List<ConnectedAsset>(); private List<ConnectedAsset> removeList = new List<ConnectedAsset>();
private List<int> siblingIndex = new List<int>(); private List<int> siblingIndex = new List<int>();
private CustomAssetConnector connector;
public RemoveSelectObjectCommand()
{
}
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); } public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
@@ -27,7 +21,7 @@ namespace Studio.Command
public void Execute() public void Execute()
{ {
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>(); var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
connector = ManagerHub.instance.Get<CustomAssetConnector>(); var connector = ManagerHub.instance.Get<CustomAssetConnector>();
if (renderObjectHandler.selectedRenderObjects.Count == 0) if (renderObjectHandler.selectedRenderObjects.Count == 0)
return; return;
@@ -64,6 +58,7 @@ namespace Studio.Command
public void Undo() public void Undo()
{ {
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
for (int i = 0; i < removeList.Count; i++) for (int i = 0; i < removeList.Count; i++)
{ {
ConnectedAsset connectedAsset = removeList[i]; ConnectedAsset connectedAsset = removeList[i];

View File

@@ -15,6 +15,7 @@ namespace Studio.Command
Stack<IReversibleCommand> undoableStack = new (); Stack<IReversibleCommand> undoableStack = new ();
public void Invoke(IReversibleCommand command) public void Invoke(IReversibleCommand command)
{ {
Debug.Log($"Invoke Reversible Command={command}");
command.Execute(); command.Execute();
commandStack.Push(command); commandStack.Push(command);
undoableStack.Push(command); undoableStack.Push(command);
@@ -22,6 +23,7 @@ namespace Studio.Command
public void Invoke(IIrreversibleCommand command) public void Invoke(IIrreversibleCommand command)
{ {
Debug.Log($"Invoke Irreversible Command={command}");
command.Execute(); command.Execute();
commandStack.Push(command); commandStack.Push(command);
} }