2025-08-18 07:26:33 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
using UnityEditor;
|
|
|
|
using UnityEngine;
|
2025-08-19 23:41:04 +00:00
|
|
|
using UnityEditor.AddressableAssets;
|
2025-08-18 07:26:33 +00:00
|
|
|
|
|
|
|
namespace DDD
|
|
|
|
{
|
|
|
|
[CreateAssetMenu(menuName = "DDD/Project Setup Config", fileName = "ProjectDDD_Setup")]
|
|
|
|
public sealed class ProjectDDD_Setup : ScriptableObject
|
|
|
|
{
|
2025-08-19 23:41:04 +00:00
|
|
|
private const string LogPrefix = "[ProjectDDD_Setup]";
|
2025-08-18 07:26:33 +00:00
|
|
|
|
|
|
|
public List<DefaultAsset> DefaultAssets = new();
|
|
|
|
public GoogleSheetManager GoogleSheetManager;
|
|
|
|
|
|
|
|
[Button("프로젝트 동기화")]
|
|
|
|
public async Task SyncProject()
|
|
|
|
{
|
|
|
|
Debug.Log($"{LogPrefix} 프로젝트 동기화 시작");
|
2025-08-19 23:41:04 +00:00
|
|
|
|
|
|
|
// 1) Addressables 기본 설정 및 그룹 보장
|
|
|
|
var addressableAssetSettings = AddressableAssetSettingsDefaultObject.GetSettings(false);
|
|
|
|
if (addressableAssetSettings == null)
|
|
|
|
{
|
|
|
|
Debug.Log($"{LogPrefix} 기존 Addressables Settings이 없습니다.");
|
|
|
|
|
|
|
|
addressableAssetSettings = AddressableAssetSettingsDefaultObject.GetSettings(true);
|
|
|
|
if (addressableAssetSettings == null)
|
|
|
|
{
|
|
|
|
Debug.LogError($"{LogPrefix} Addressables Settings생성에 실패했습니다.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Debug.Log($"{LogPrefix} Addressables Settings 기본값으로 생성했습니다.");
|
|
|
|
}
|
2025-08-18 07:26:33 +00:00
|
|
|
|
|
|
|
foreach (var asset in DefaultAssets)
|
|
|
|
{
|
|
|
|
// 해당 폴더 reimport 하고 완료될 때까지 대기
|
|
|
|
if (asset != null)
|
|
|
|
{
|
|
|
|
string assetPath = AssetDatabase.GetAssetPath(asset);
|
|
|
|
Debug.Log($"{LogPrefix} 에셋 재임포트 시작: {asset.name}");
|
|
|
|
|
|
|
|
// 폴더의 경우 수동 Reimport와 동일하게 재귀 옵션을 추가하고
|
|
|
|
// 동기식 강제 임포트로 Import가 완료될 때까지 대기하도록 처리
|
|
|
|
var importOptions = ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport;
|
|
|
|
if (AssetDatabase.IsValidFolder(assetPath))
|
|
|
|
{
|
|
|
|
importOptions |= ImportAssetOptions.ImportRecursive;
|
|
|
|
}
|
|
|
|
AssetDatabase.ImportAsset(assetPath, importOptions);
|
|
|
|
|
|
|
|
Debug.Log($"{LogPrefix} 에셋 재임포트 완료: {asset.name}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Debug.Log($"{LogPrefix} Google Sheet 동기화 시작");
|
|
|
|
if (GoogleSheetManager != null)
|
|
|
|
{
|
|
|
|
await GoogleSheetManager.SyncSoOnlyFromCurrentJson();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Debug.LogWarning($"{LogPrefix} GoogleSheetManager가 설정되어 있지 않습니다. Google Sheet 동기화를 건너뜁니다.");
|
|
|
|
}
|
|
|
|
Debug.Log($"{LogPrefix} Google Sheet 동기화 완료");
|
|
|
|
|
|
|
|
// 에셋 데이터베이스 최신화 보장 (수동 Reimport 후 상태와 유사하게 유지)
|
|
|
|
AssetDatabase.Refresh();
|
|
|
|
|
|
|
|
Debug.Log($"{LogPrefix} 프로젝트 동기화 완료");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|