자산관리자 URL에 잘못된 값이 한번이라도 입력되었을 경우 이후 정상 작동 하지 않는 오류 수정 #122

Merged
jym merged 1 commits from jym/250528_05 into main 2025-05-28 20:53:59 +09:00
9 changed files with 143 additions and 59 deletions

View File

@@ -1,24 +0,0 @@
using Studio.Command;
using Studio.Manage;
namespace Studio
{
public class LoadLocalAssetCommand : IIrreversibleCommand
{
public string id { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
public bool CanExecute()
{
throw new System.NotImplementedException();
}
public void Execute()
{
var assetManager = ManagerHub.instance.Get<AssetManager>();
var canvas_Popup = CanvasManager.instance.GetCanvas<Canvas_Popup>();
assetManager.CombineAssetFolderPaths(canvas_Popup.panel_assetmanager.GetAssetManagerData().localAssetsPaths);
assetManager.CombineAssetFolderPaths(canvas_Popup.panel_assetsetting.GetAssetManagerData().localAssetsPaths);
assetManager.LoadLocalFBXDirectorys();
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 3b90a946289e83746bd7ab964aeec940

View File

@@ -16,7 +16,15 @@ namespace Studio.Manage
private List<string> folderPathList = new List<string>();
private Dictionary<int, HierarchyItem> itemDict = new Dictionary<int, HierarchyItem>();
private Dictionary<int, string> assetSettingPaths = new Dictionary<int, string>();
private Dictionary<int, string> assetManagerPaths = new Dictionary<int, string>();
public Action<Dictionary<int, string>> onAddMangerPaths;
public Action<Dictionary<int, string>> onAddSettingPaths;
public Action<AssetManagerData> onAssetManagerDatas;
public Action<AssetManagerData> onSetAssetManager;
public Action<AssetManagerData> onSetAssetSetting;
public override void Init()
{
@@ -29,8 +37,11 @@ namespace Studio.Manage
var projectManager = ManagerHub.instance.Get<ProjectManager>();
fbxFileManager.onLoadComplete += OnLoadCustomAsset;
onAssetManagerDatas += canvas_Popup.panel_assetmanager.SetAssetManager;
onAssetManagerDatas += canvas_Popup.panel_assetsetting.SetAssetManager;
onAddSettingPaths += canvas_Popup.panel_assetsetting.SetAssetPathItmes;
onAddMangerPaths += canvas_Popup.panel_assetmanager.SetAssetPathItmes;
onSetAssetManager += canvas_Popup.panel_assetmanager.SetAssetManager;
onSetAssetSetting += canvas_Popup.panel_assetsetting.SetAssetManager;
onAssetManagerDatas += (data) => projectManager.OpenProjectSettingsDataAfterDataLoad();
}
@@ -39,8 +50,40 @@ namespace Studio.Manage
localAssetPaths.Clear();
folderPathList.Clear();
}
public void LoadAssetManagerFBXDirectorys(int index, string folderPath)
{
if (!assetManagerPaths.ContainsKey(index))
{
assetManagerPaths.Add(index, folderPath);
}
else
{
assetManagerPaths[index] = folderPath;
}
onAddSettingPaths?.Invoke(assetManagerPaths);
CombineAssetFolderPaths(assetManagerPaths.Values.ToList());
}
public void LoadAssetSettingFBXDirectorys(int index, string folderPath)
{
if (!assetSettingPaths.ContainsKey(index))
{
assetSettingPaths.Add(index, folderPath);
}
else
{
assetSettingPaths[index] = folderPath;
}
onAddMangerPaths?.Invoke(assetSettingPaths);
CombineAssetFolderPaths(assetSettingPaths.Values.ToList());
}
public void CombineAssetFolderPaths(List<string> folderPaths)
{
ClearFolderPathList();
if (folderPaths == null)
return;
foreach(var folderPath in folderPaths)
{
if (folderPathList.Contains(folderPath))
@@ -50,6 +93,8 @@ namespace Studio.Manage
folderPathList.Add(folderPath);
localAssetPaths.Add(folderPath);
}
LoadLocalFBXDirectorys();
}
public void LoadLocalFBXDirectorys()
{
@@ -60,6 +105,11 @@ namespace Studio.Manage
assetManagerData.localAssetsPaths.AddRange(folderPathList);
onAssetManagerDatas?.Invoke(assetManagerData);
}
public void SetAssetManager(AssetManagerData data)
{
onSetAssetManager?.Invoke(data);
onSetAssetSetting?.Invoke(data);
}
private void OnLoadCustomAsset()
{

View File

@@ -48,6 +48,7 @@ namespace Studio.AssetTool
}
public void ClearFilePaths()
{
dataRepo.assetDatas.Clear();
filePaths.Clear();
}
public void LoadLocalFBXDirectorys(List<string> folderPaths)
@@ -62,6 +63,11 @@ namespace Studio.AssetTool
public void LoadLocalFBXDirectory(string folderPath)
{
if (!Directory.Exists(folderPath))
{
return;
}
var files = Directory.GetFiles(folderPath, "*.fbx", SearchOption.AllDirectories);
foreach (var file in files)
@@ -93,7 +99,6 @@ namespace Studio.AssetTool
if (dataRepo.TryGetDataFromName(assetName, out var p))
{
OnLoadComplete(p);
continue;
}

View File

@@ -133,7 +133,7 @@ namespace Studio.Manage
sceneSettingService.SetMQTTSettingData(curProjectData.sceneStartSetting.mqttSetting);
assetManager.CombineAssetFolderPaths(curProjectData.assetManagerData.localAssetsPaths);
assetManager.LoadLocalFBXDirectorys();
assetManager.SetAssetManager(curProjectData.assetManagerData);
}
else
{

View File

@@ -79,13 +79,14 @@ namespace Studio
canvasHandler = new PopupCanvasHandler(this);
var assetManager = ManagerHub.instance.Get<AssetManager>();
var dataManager = FindAnyObjectByType<ConnectDataManager>();
var quitManager = FindAnyObjectByType<QuitManager>();
panel_newprojectinfo.onClickCreate += () => CommandInvoker.instance.Invoke(new NewProjectCommand());
panel_openprojectinfo.onClickOpen += () => CommandInvoker.instance.Invoke(new OpenProjectCommand());
panel_assetmanager.onSelectedURLs += () => CommandInvoker.instance.Invoke(new LoadLocalAssetCommand());
panel_assetsetting.onSelectedURLs += () => CommandInvoker.instance.Invoke(new LoadLocalAssetCommand());
panel_assetmanager.onSelectedURL += assetManager.LoadAssetManagerFBXDirectorys;
panel_assetsetting.onSelectedURL += assetManager.LoadAssetSettingFBXDirectorys;
panel_saveandnewchecker.onClickSaveAndNew += () => CommandInvoker.instance.Invoke(new SaveAndNewProjectCommand());
panel_saveandopenchecker.onClickSaveAndOpen += () => CommandInvoker.instance.Invoke(new SaveAndOpenProjectCommand());

View File

@@ -12,7 +12,7 @@ namespace Studio.UI
private TMP_InputField InputField_URL;
private Button Button_SelectedFolder;
public Action onEndEditInputFieldURL;
public Action<UI_FolderPathItem> onEndEditInputFieldURL;
public override void AfterAwake()
{
@@ -28,7 +28,7 @@ namespace Studio.UI
if (string.IsNullOrEmpty(input))
return;
onEndEditInputFieldURL?.Invoke();
onEndEditInputFieldURL?.Invoke(this);
}
private void OnClickSelectedFolderButton()
{

View File

@@ -1,6 +1,7 @@
using Studio.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
@@ -26,9 +27,9 @@ namespace Studio.UI
private UI_FolderPathItem prf_folderPathItem;
private List<UI_FolderPathItem> folderPathItems = new List<UI_FolderPathItem>();
private List<string> selectedURLs = new List<string>();
private Dictionary<int, string> selectedURLs = new Dictionary<int, string>();
public Action onSelectedURLs;
public Action<int, string> onSelectedURL;
public override void AfterAwake()
{
@@ -70,29 +71,55 @@ namespace Studio.UI
}
private void OnClickAddFolderPathItemButton()
{
selectedURLs.Clear();
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
folderPathItems.Add(item);
item.onEndEditInputFieldURL += LoadAsstsPath;
selectedURLs.Add(folderPathItems.IndexOf(item), item.GetURL());
Button_AddFolderPathItem.transform.SetAsLastSibling();
}
private void LoadAsstsPath()
private void LoadAsstsPath(UI_FolderPathItem item)
{
foreach(var item in folderPathItems)
for(int i = 0; i < folderPathItems.Count; i++)
{
selectedURLs.Add(item.GetURL());
if(folderPathItems[i] == item)
{
onSelectedURL?.Invoke(i, item.GetURL());
}
}
onSelectedURLs?.Invoke();
}
public AssetManagerData GetAssetManagerData()
{
var assetManagerData = new AssetManagerData();
assetManagerData.localAssetsPaths.AddRange(selectedURLs);
assetManagerData.localAssetsPaths.AddRange(selectedURLs.Values.ToList());
return assetManagerData;
}
public void SetAssetPathItmes(Dictionary<int, string> paths)
{
var keys = paths.Keys.ToList();
for (int i = 0; i < keys.Count; i++)
{
int key = keys[i];
if (selectedURLs.ContainsKey(key))
{
folderPathItems[i].SetData(paths[key]);
selectedURLs[key] = paths[key];
}
else
{
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
item.onEndEditInputFieldURL += LoadAsstsPath;
item.SetData(paths[key]);
folderPathItems.Add(item);
selectedURLs.Add(key, item.GetURL());
Button_AddFolderPathItem.transform.SetAsLastSibling();
}
}
}
public void SetAssetManager(AssetManagerData assetManagerData)
{
selectedURLs.Clear();
@@ -106,13 +133,13 @@ namespace Studio.UI
if (assetManagerData == null)
return;
foreach (var localPath in assetManagerData.localAssetsPaths)
for (int i = 0; i < assetManagerData.localAssetsPaths.Count; i++)
{
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
item.onEndEditInputFieldURL += LoadAsstsPath;
item.SetData(localPath);
item.SetData(assetManagerData.localAssetsPaths[i]);
folderPathItems.Add(item);
selectedURLs.Add(item.GetURL());
selectedURLs.Add(i,item.GetURL());
Button_AddFolderPathItem.transform.SetAsLastSibling();
}

View File

@@ -1,6 +1,7 @@
using Studio.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using XRLib.UI;
@@ -25,9 +26,9 @@ namespace Studio.UI
private UI_FolderPathItem prf_folderPathItem;
private List<UI_FolderPathItem> folderPathItems = new List<UI_FolderPathItem>();
private List<string> selectedURLs = new List<string>();
private Dictionary<int, string> selectedURLs = new Dictionary<int, string>();
public Action onSelectedURLs;
public Action<int, string> onSelectedURL;
public override void AfterAwake()
{
@@ -64,29 +65,55 @@ namespace Studio.UI
}
private void OnClickAddFolderPathItemButton()
{
selectedURLs.Clear();
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
folderPathItems.Add(item);
item.onEndEditInputFieldURL += LoadAsstsPath;
selectedURLs.Add(folderPathItems.IndexOf(item), item.GetURL());
Button_AddFolderPathItem.transform.SetAsLastSibling();
}
private void LoadAsstsPath()
private void LoadAsstsPath(UI_FolderPathItem item)
{
foreach (var item in folderPathItems)
for (int i = 0; i < folderPathItems.Count; i++)
{
selectedURLs.Add(item.GetURL());
if (folderPathItems[i] == item)
{
onSelectedURL?.Invoke(i, item.GetURL());
}
}
onSelectedURLs?.Invoke();
}
public AssetManagerData GetAssetManagerData()
{
var assetManagerData = new AssetManagerData();
assetManagerData.localAssetsPaths.AddRange(selectedURLs);
assetManagerData.localAssetsPaths.AddRange(selectedURLs.Values.ToList());
return assetManagerData;
}
public void SetAssetPathItmes(Dictionary<int, string> paths)
{
var keys = paths.Keys.ToList();
for (int i = 0; i < keys.Count; i++)
{
int key = keys[i];
if (selectedURLs.ContainsKey(key))
{
folderPathItems[i].SetData(paths[key]);
selectedURLs[key] = paths[key];
}
else
{
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
item.onEndEditInputFieldURL += LoadAsstsPath;
item.SetData(paths[key]);
folderPathItems.Add(item);
selectedURLs.Add(key, item.GetURL());
Button_AddFolderPathItem.transform.SetAsLastSibling();
}
}
}
public void SetAssetManager(AssetManagerData assetManagerData)
{
selectedURLs.Clear();
@@ -100,13 +127,13 @@ namespace Studio.UI
if (assetManagerData == null)
return;
foreach (var localPath in assetManagerData.localAssetsPaths)
for (int i = 0; i < assetManagerData.localAssetsPaths.Count; i++)
{
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
item.onEndEditInputFieldURL += LoadAsstsPath;
item.SetData(localPath);
item.SetData(assetManagerData.localAssetsPaths[i]);
folderPathItems.Add(item);
selectedURLs.Add(item.GetURL());
selectedURLs.Add(i, item.GetURL());
Button_AddFolderPathItem.transform.SetAsLastSibling();
}