DDD-33 에셋 매니저 구현

This commit is contained in:
NTG_Lenovo 2025-07-10 14:48:44 +09:00
parent 8fd305f106
commit 32cf8177e8
75 changed files with 358 additions and 248 deletions

View File

@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: 30e7f67fe9aaa7849a34c9b6e2bc53ae m_DefaultGroup: 30e7f67fe9aaa7849a34c9b6e2bc53ae
m_currentHash: m_currentHash:
serializedVersion: 2 serializedVersion: 2
Hash: b999ffdad28e71d51bc1ab0c8e9efbfa Hash: 00000000000000000000000000000000
m_OptimizeCatalogSize: 0 m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 1 m_BuildRemoteCatalog: 1
m_CatalogRequestsTimeout: 0 m_CatalogRequestsTimeout: 0

View File

@ -15,20 +15,14 @@ MonoBehaviour:
m_GroupName: GoogleSheetSo_Group m_GroupName: GoogleSheetSo_Group
m_GUID: 7fe0c33d351391a45a0ea3c93ecef42e m_GUID: 7fe0c33d351391a45a0ea3c93ecef42e
m_SerializeEntries: m_SerializeEntries:
- m_GUID: 3dee12c6902e0644fab1d0e2693857a8 - m_GUID: 8261ff435a6e2484086e02e556c0ba93
m_Address: ItemSo m_Address: FoodDataSo
m_ReadOnly: 0 m_ReadOnly: 0
m_SerializedLabels: m_SerializedLabels:
- GoogleSheetSo - GoogleSheetSo
FlaggedDuringContentUpdateRestriction: 0 FlaggedDuringContentUpdateRestriction: 0
- m_GUID: b7e176e1cb8d76941af3b6344a4e1401 - m_GUID: c2be393a39588b647bacdd69f47f677d
m_Address: FoodSo m_Address: ItemDataSo
m_ReadOnly: 0
m_SerializedLabels:
- GoogleSheetSo
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: f38617ba14522db4d87bb7e10c280a2d
m_Address: MonsterSo
m_ReadOnly: 0 m_ReadOnly: 0
m_SerializedLabels: m_SerializedLabels:
- GoogleSheetSo - GoogleSheetSo

View File

@ -48,7 +48,7 @@ MonoBehaviour:
_isAccessGoogleSheet: 1 _isAccessGoogleSheet: 1
_googleSheetUrl: https://script.google.com/macros/s/AKfycbw8TRSl_OuY2S-RX0yvOJi1SqNqoflG0R3pWxk9GC9u_wvGQeuABZc0VH7YJ5lMrAl4/exec _googleSheetUrl: https://script.google.com/macros/s/AKfycbw8TRSl_OuY2S-RX0yvOJi1SqNqoflG0R3pWxk9GC9u_wvGQeuABZc0VH7YJ5lMrAl4/exec
_namespace: DDD _namespace: DDD
_availSheets: Food/Monster/Item _availSheets: FoodData/ItemData
_generateFolderPath: /_DDD/_Scripts/GenerateGoogleSheet/AutoCreated _generateFolderPath: /_DDD/_Scripts/GenerateGoogleSheet/AutoCreated
_currentVersion: "1 - 2025-07-04 16:18:02 by \uB0A8\uD0DC\uAC74" _currentVersion: "1 - 2025-07-04 16:18:02 by \uB0A8\uD0DC\uAC74"
_restoreIndex: 0 _restoreIndex: 0

View File

@ -4692,6 +4692,18 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: GoogleSheetManager value: GoogleSheetManager
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 6289760680591803305, guid: 05aeb8078f8dc7c489b71a0ce5bc4fac, type: 3}
propertyPath: _editorName
value:
objectReference: {fileID: 0}
- target: {fileID: 6289760680591803305, guid: 05aeb8078f8dc7c489b71a0ce5bc4fac, type: 3}
propertyPath: _currentVersion
value: "2 - 2025-07-10 14:06:48 by \uB0A8\uD0DC\uAC74"
objectReference: {fileID: 0}
- target: {fileID: 6289760680591803305, guid: 05aeb8078f8dc7c489b71a0ce5bc4fac, type: 3}
propertyPath: _refreshTrigger
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
@ -19573,7 +19585,7 @@ SpriteRenderer:
m_Size: {x: 6.84, y: 4.86} m_Size: {x: 6.84, y: 4.86}
m_AdaptiveModeThreshold: 0.5 m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0 m_SpriteTileMode: 0
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 0
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!4 &1555910286334263882 --- !u!4 &1555910286334263882
@ -30976,7 +30988,7 @@ SpriteRenderer:
m_Size: {x: 8, y: 3} m_Size: {x: 8, y: 3}
m_AdaptiveModeThreshold: 0.5 m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0 m_SpriteTileMode: 0
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 0
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!210 &2810339226026076516 --- !u!210 &2810339226026076516
@ -43140,7 +43152,7 @@ SpriteRenderer:
m_Size: {x: 14.44, y: 8.6} m_Size: {x: 14.44, y: 8.6}
m_AdaptiveModeThreshold: 0.5 m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0 m_SpriteTileMode: 0
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 0
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!210 &4335431399105516519 --- !u!210 &4335431399105516519
@ -47226,7 +47238,7 @@ SpriteRenderer:
m_Size: {x: 28.7, y: 5.6} m_Size: {x: 28.7, y: 5.6}
m_AdaptiveModeThreshold: 0.5 m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0 m_SpriteTileMode: 0
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 0
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!4 &4774839203087077672 --- !u!4 &4774839203087077672

View File

@ -149,7 +149,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_persistent: 1 _persistent: 1
_managerDefinition: {fileID: 11400000, guid: a98ebd2611b2e4e80a867f57fdc91fc9, type: 2} _managerDefinitionSo: {fileID: 11400000, guid: d8346bac7a0fdab419cca3193df2ca34, type: 2}
--- !u!4 &1415192492 --- !u!4 &1415192492
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -159,7 +159,7 @@ Transform:
m_GameObject: {fileID: 1415192490} m_GameObject: {fileID: 1415192490}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 721.5473, y: 0, z: 201.61682} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System;
using UnityEngine; using UnityEngine;
using UnityEngine.AddressableAssets; using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.ResourceManagement.AsyncOperations;
@ -12,25 +12,27 @@ public void Init()
} }
public void PostInit() public async void PostInit()
{ {
try
{
await Addressables.InitializeAsync().Task;
}
catch (Exception e)
{
Debug.Assert(false, "Addressables initialization failed");
}
} }
// public AsyncOperationHandle LoadAsset(AssetReference assetRef) public static async Awaitable<T> LoadAsset<T>(string key) where T : UnityEngine.Object
// { {
// var handle = Addressables.LoadAssetAsync<T>(key);
// var handle = assetRef.LoadAssetAsync<ScriptableObject>(); await handle.Task;
// } if (handle.Status == AsyncOperationStatus.Succeeded)
// return handle.Result;
// private void OnAssetLoaded(AsyncOperationHandle obj)
// { Debug.LogError($"Addressable load failed : {key}");
// return null;
// } }
//
// public void ReleaseAsset()
// {
// TestRef.ReleaseAsset();
// }
} }
} }

View File

@ -1,21 +1,39 @@
using System;
using System.Linq;
using UnityEngine; using UnityEngine;
namespace DDD namespace DDD
{ {
public class DataManager : Singleton<DataManager>, IManager public class DataManager : Singleton<DataManager>, IManager
{ {
public ItemDataSo ItemDataSo { get; private set; }
public void Init() public void Init()
{ {
} }
public void PostInit() public async void PostInit()
{ {
try
{
ItemDataSo = await AssetManager.LoadAsset<ItemDataSo>("ItemDataSo");
}
catch (Exception e)
{
Debug.LogError($"So bind failed\n{e.Message}");
}
} }
// TODO : So가 늘어나는 경우 관리 방법 변경 필요성이 있음
// GetItemType(id) // GetItemType(id)
// GetItemImage // GetItemImage
// GetItemName // GetItemName
public ItemType GetItemType(string key)
{
ItemData itemData = ItemDataSo.ItemDataList.FirstOrDefault(item => item.Id == key);
return itemData?.ItemType ?? ItemType.None;
}
} }
} }

View File

@ -0,0 +1,47 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4251080669997520799
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9003561875116500446}
- component: {fileID: 4889131746858770208}
m_Layer: 0
m_Name: DataManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &9003561875116500446
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4251080669997520799}
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: 1
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4889131746858770208
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4251080669997520799}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 07beed0d64f351c4e9b01784eebf0498, type: 3}
m_Name:
m_EditorClassIdentifier:
_persistent: 1

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d90fdb17f0162334daadc6fc93e9a0e3
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,14 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 0}
m_Name: GameFlowAssetsSo
m_EditorClassIdentifier: Assembly-CSharp:DDD:GameFlowAssetsSo

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: b7e176e1cb8d76941af3b6344a4e1401 guid: 4fca93ffece40ff48973532398011d84
NativeFormatImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 11400000 mainObjectFileID: 11400000

View File

@ -1,9 +1,11 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine; using UnityEngine;
using UnityEngine.AddressableAssets; using UnityEngine.AddressableAssets;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
using UnityEngine.Serialization;
namespace DDD namespace DDD
{ {
@ -16,33 +18,37 @@ public enum GameFlowState
SettlementRestaurant = 3, SettlementRestaurant = 3,
} }
public class GameFlowData : ScriptableObject public class GameFlowDataSo : ScriptableObject
{ {
public GameFlowState CurrentGameState; public GameFlowState CurrentGameState;
} }
[CreateAssetMenu(fileName = "GameFlowAssets", menuName = "GameFlow/GameFlowAssets")] [CreateAssetMenu(fileName = "GameFlowAssetsSo", menuName = "GameFlow/GameFlowAssetsSo")]
public class GameFlowAssets : ScriptableObject public class GameFlowAssetsSo : ScriptableObject
{ {
[ShowInInspector]
public Dictionary<GameFlowState, List<string>> FlowItems = new(); public Dictionary<GameFlowState, List<string>> FlowItems = new();
[ShowInInspector]
public Dictionary<GameFlowState, List<AssetReference>> FlowAssets = new(); public Dictionary<GameFlowState, List<AssetReference>> FlowAssets = new();
} }
[CreateAssetMenu(fileName = "GameFlowSceneMapping", menuName = "GameFlow/GameFlowSceneMapping")] [CreateAssetMenu(fileName = "GameFlowSceneMappingSo", menuName = "GameFlow/GameFlowSceneMappingSo")]
public class GameFlowSceneMapping : ScriptableObject public class GameFlowSceneMappingSo : ScriptableObject
{ {
[ShowInInspector]
public Dictionary<GameFlowState, Scene> FlowToSceneMapping = new(); public Dictionary<GameFlowState, Scene> FlowToSceneMapping = new();
} }
public class GameFlowManager : Singleton<GameFlowManager>, IManager public class GameFlowManager : Singleton<GameFlowManager>, IManager
{ {
private GameFlowData _gameFlowData = null; private GameFlowDataSo _gameFlowDataSo;
public GameFlowAssets GameFlowAssets = null; public GameFlowAssetsSo GameFlowAssetsSo;
public GameFlowSceneMapping GameFlowSceneMapping; public GameFlowSceneMappingSo GameFlowSceneMappingSo;
public void Init() public void Init()
{ {
_gameFlowData = new GameFlowData(); _gameFlowDataSo = ScriptableObject.CreateInstance<GameFlowDataSo>();
} }
public void PostInit() public void PostInit()
@ -55,7 +61,7 @@ public void PostInit()
} }
} }
public bool IsGameStarted() => _gameFlowData.CurrentGameState != GameFlowState.None; public bool IsGameStarted() => _gameFlowDataSo.CurrentGameState != GameFlowState.None;
protected override void Awake() protected override void Awake()
{ {
@ -99,16 +105,16 @@ public IEnumerator ReadyNewFlow(GameFlowState newFlowState)
OpenFlowScene(newFlowState); OpenFlowScene(newFlowState);
// Ready Assets // Ready Assets
if (GameFlowAssets.FlowItems.ContainsKey(newFlowState)) if (GameFlowAssetsSo.FlowItems.ContainsKey(newFlowState))
{ {
List<string> Items = GameFlowAssets.FlowItems[newFlowState]; List<string> Items = GameFlowAssetsSo.FlowItems[newFlowState];
// Addressables.LoadAssetsAsync(Items, null); // Addressables.LoadAssetsAsync(Items, null);
// TODO : 여러 에셋 로드하고, 콜백 받을때까지 기다리기 // TODO : 여러 에셋 로드하고, 콜백 받을때까지 기다리기
// Wait // Wait
} }
if (GameFlowAssets.FlowAssets.ContainsKey(newFlowState)) if (GameFlowAssetsSo.FlowAssets.ContainsKey(newFlowState))
{ {
//List<AssetReference> Assets = GameFlowAssets.FlowItems[newFlowState]; //List<AssetReference> Assets = GameFlowAssets.FlowItems[newFlowState];
// Addressables.LoadAssetsAsync(Assets, ) // Addressables.LoadAssetsAsync(Assets, )
@ -144,7 +150,7 @@ public void OnFlowSceneOpened(Scene newScene)
public bool GetFlowScene(GameFlowState flowState, out Scene scene) public bool GetFlowScene(GameFlowState flowState, out Scene scene)
{ {
if (GameFlowSceneMapping.FlowToSceneMapping.TryGetValue(flowState, out scene)) if (GameFlowSceneMappingSo.FlowToSceneMapping.TryGetValue(flowState, out scene))
{ {
return true; return true;
} }

View File

@ -0,0 +1,14 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 0}
m_Name: GameFlowSceneMappingSo
m_EditorClassIdentifier: Assembly-CSharp:DDD:GameFlowSceneMappingSo

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a98ebd2611b2e4e80a867f57fdc91fc9 guid: 11d1c2609268ac14fa627958ee097fac
NativeFormatImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 11400000 mainObjectFileID: 11400000

View File

@ -1,21 +1,20 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine; using UnityEngine;
using Object = UnityEngine.Object;
namespace DDD namespace DDD
{ {
[CreateAssetMenu(fileName = "ManagerDefinition", menuName = "GameFramework/ManagerDefinition")] [CreateAssetMenu(fileName = "ManagerDefinitionSo", menuName = "GameFramework/ManagerDefinitionSo")]
public class ManagerDefinition : ScriptableObject public class ManagerDefinitionSo : ScriptableObject
{ {
public List<Singleton> ManagerClasses; public List<Singleton> ManagerClasses;
} }
public class GameManager : Singleton<GameManager> public class GameManager : Singleton<GameManager>
{ {
public ManagerDefinition _managerDefinition; [SerializeField]
public List<Singleton> _ManagerInstances; private ManagerDefinitionSo _managerDefinitionSo;
private List<Singleton> _managerInstances;
protected override void OnAwake() protected override void OnAwake()
{ {
@ -24,16 +23,18 @@ protected override void OnAwake()
// Entry Scene에서 뭘 해야할까? // Entry Scene에서 뭘 해야할까?
// 매니저 초기화 // 매니저 초기화
foreach (var managerObject in _managerDefinition.ManagerClasses) _managerInstances = new List<Singleton>(_managerDefinitionSo.ManagerClasses.Count);
foreach (var managerObject in _managerDefinitionSo.ManagerClasses)
{ {
var managerInstance = Instantiate(managerObject); var managerInstance = Instantiate(managerObject);
_ManagerInstances.Add(managerInstance); _managerInstances.Add(managerInstance);
if (managerInstance is IManager manager) if (managerInstance is IManager manager)
{ {
manager.Init(); manager.Init();
} }
} }
foreach (var managerInstance in _ManagerInstances) foreach (var managerInstance in _managerInstances)
{ {
if (managerInstance is IManager manager) if (managerInstance is IManager manager)
{ {

View File

@ -10,8 +10,9 @@ MonoBehaviour:
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 0} m_Script: {fileID: 0}
m_Name: ManagerDefinition m_Name: ManagerDefinitionSo
m_EditorClassIdentifier: Assembly-CSharp:DDD:ManagerDefinition m_EditorClassIdentifier: Assembly-CSharp:DDD:ManagerDefinitionSo
ManagerClasses: ManagerClasses:
- {fileID: 6471498998539637564, guid: fa2ad62c75b1549f09597e47ed5f7cfb, type: 3}
- {fileID: 7665229218737596710, guid: 71b177c2a18314c588da30429451666a, type: 3} - {fileID: 7665229218737596710, guid: 71b177c2a18314c588da30429451666a, type: 3}
- {fileID: 6471498998539637564, guid: fa2ad62c75b1549f09597e47ed5f7cfb, type: 3}
- {fileID: 4889131746858770208, guid: d90fdb17f0162334daadc6fc93e9a0e3, type: 3}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 3dee12c6902e0644fab1d0e2693857a8 guid: d8346bac7a0fdab419cca3193df2ca34
NativeFormatImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 11400000 mainObjectFileID: 11400000

View File

@ -0,0 +1,77 @@
{
"$개요": [
{
"": "시트 생성"
}
],
"FoodData": [
{
"Id:string": "식별ID",
"Name:string": "이름",
"Cookware_Enum": "요리도구",
"Ingredient1:string": "재료1",
"Ingredient2:string": "재료2",
"Taste1:Taste_Enum": "맛1",
"Taste2:Taste_Enum": "맛2",
"Sprite:Sprite": "Addressable 이미지 이름"
},
{
"Id:string": "Food001",
"Name:string": "햇빛수프",
"Cookware_Enum": "Pot",
"Ingredient1:string": "극락쌀",
"Ingredient2:string": "햇빛당근",
"Taste1:Taste_Enum": "Bitter",
"Taste2:Taste_Enum": "Sweet",
"Sprite:Sprite": "Gold"
},
{
"Id:string": "Food002",
"Name:string": "B",
"Cookware_Enum": "FryingPan",
"Ingredient1:string": 1,
"Ingredient2:string": 1,
"Taste1:Taste_Enum": "Spicy",
"Taste2:Taste_Enum": "Bitter",
"Sprite:Sprite": ""
},
{
"Id:string": "Food003",
"Name:string": "C",
"Cookware_Enum": "Pot",
"Ingredient1:string": 2,
"Ingredient2:string": 2,
"Taste1:Taste_Enum": "Fresh",
"Taste2:Taste_Enum": "None",
"Sprite:Sprite": ""
},
{
"Id:string": "Food004",
"Name:string": "D",
"Cookware_Enum": "Plating",
"Ingredient1:string": 3,
"Ingredient2:string": 3,
"Taste1:Taste_Enum": " ",
"Taste2:Taste_Enum": "Salty",
"Sprite:Sprite": "Gold"
}
],
"ItemData": [
{
"Id": "식별번호",
"ItemType_Enum": "아이템타입"
},
{
"Id": "Item001",
"ItemType_Enum": "Food"
},
{
"Id": "Item002",
"ItemType_Enum": "Prop"
},
{
"Id": "Item003",
"ItemType_Enum": "Interactable"
}
]
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5a1f5fa4ff4feee4e91087c012fd82bf
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -5,7 +5,7 @@
namespace DDD namespace DDD
{ {
[Serializable] [Serializable]
public class Food public class FoodData
{ {
/// <summary>식별ID</summary> /// <summary>식별ID</summary>
[Tooltip("식별ID")] [Tooltip("식별ID")]

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 75468224b7088a34b861c056d4528fec

View File

@ -0,0 +1,12 @@
// <auto-generated> File: FoodDataSo.cs
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "FoodDataSo", menuName = "GoogleSheet/FoodDataSo")]
public class FoodDataSo : ScriptableObject
{
public List<FoodData> FoodDataList;
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 23d26ce5ffaf3e44bb79a4d77ead320d

View File

@ -5,27 +5,15 @@
namespace DDD namespace DDD
{ {
[Serializable] [Serializable]
public class Item public class ItemData
{ {
/// <summary>식별번호</summary> /// <summary>식별번호</summary>
[Tooltip("식별번호")] [Tooltip("식별번호")]
public string Id; public string Id;
/// <summary>이름</summary>
[Tooltip("이름")]
public string Name;
/// <summary>아이템타입</summary> /// <summary>아이템타입</summary>
[Tooltip("아이템타입")] [Tooltip("아이템타입")]
public ItemType ItemType; public ItemType ItemType;
/// <summary>셀크기X</summary>
[Tooltip("셀크기X")]
public int CellSizeX;
/// <summary>셀크기Y</summary>
[Tooltip("셀크기Y")]
public int CellSizeY;
} }
} }

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b45493673e890264c89efa652ddd00da

View File

@ -0,0 +1,12 @@
// <auto-generated> File: ItemDataSo.cs
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "ItemDataSo", menuName = "GoogleSheet/ItemDataSo")]
public class ItemDataSo : ScriptableObject
{
public List<ItemData> ItemDataList;
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a9a45b736c555724bbc4b3a46116b356

View File

@ -26,9 +26,9 @@ public enum Taste
public enum ItemType public enum ItemType
{ {
None = 0, None = 0,
Floor = 1, Food = 1,
Furniture = 2, Prop = 2,
WallMount = 3, Interactable = 3,
} }
} }

View File

@ -4,7 +4,7 @@
"": "시트 생성" "": "시트 생성"
} }
], ],
"Food": [ "FoodData": [
{ {
"Id:string": "식별ID", "Id:string": "식별ID",
"Name:string": "이름", "Name:string": "이름",
@ -56,61 +56,22 @@
"Sprite:Sprite": "Gold" "Sprite:Sprite": "Gold"
} }
], ],
"Monster": [ "ItemData": [
{ {
"Id": "식별번호", "Id": "식별번호",
"Name": "이름", "ItemType_Enum": "아이템타입"
"T1": "테스트1"
},
{
"Id": "Test001",
"Name": "A",
"T1": 1
},
{
"Id": "Test002",
"Name": "B",
"T1": 2
},
{
"Id": "Test003",
"Name": "C",
"T1": 3
},
{
"Id": "Test004",
"Name": "D",
"T1": 4
}
],
"Item": [
{
"Id": "식별번호",
"Name": "이름",
"ItemType_Enum": "아이템타입",
"CellSizeX:int": "셀크기X",
"CellSizeY:int": "셀크기Y"
}, },
{ {
"Id": "Item001", "Id": "Item001",
"Name": "나무장판", "ItemType_Enum": "Food"
"ItemType_Enum": "Floor",
"CellSizeX:int": 1,
"CellSizeY:int": 1
}, },
{ {
"Id": "Item002", "Id": "Item002",
"Name": "테이블", "ItemType_Enum": "Prop"
"ItemType_Enum": "Furniture",
"CellSizeX:int": 2,
"CellSizeY:int": 2
}, },
{ {
"Id": "Item003", "Id": "Item003",
"Name": "전등", "ItemType_Enum": "Interactable"
"ItemType_Enum": "WallMount",
"CellSizeX:int": "",
"CellSizeY:int": ""
} }
] ]
} }

View File

@ -91,4 +91,32 @@ MonoBehaviour:
2\n },\n {\n \"Id\": \"Item003\",\n \"Name\": \"\uC804\uB4F1\",\n 2\n },\n {\n \"Id\": \"Item003\",\n \"Name\": \"\uC804\uB4F1\",\n
\"ItemType_Enum\": \"WallMount\",\n \"CellSizeX:int\": \"\",\n \"CellSizeY:int\": \"ItemType_Enum\": \"WallMount\",\n \"CellSizeX:int\": \"\",\n \"CellSizeY:int\":
\"\"\n }\n ]\n}" \"\"\n }\n ]\n}"
- Editor: "\uB0A8\uD0DC\uAC74"
Timestamp: 2025-07-10 14:06:48
JsonSnapshot: "{\n \"$\uAC1C\uC694\": [\n {\n \"\": \"\uC2DC\uD2B8 \uC0DD\uC131\"\n
}\n ],\n \"FoodData\": [\n {\n \"Id:string\": \"\uC2DD\uBCC4ID\",\n
\"Name:string\": \"\uC774\uB984\",\n \"Cookware_Enum\": \"\uC694\uB9AC\uB3C4\uAD6C\",\n
\"Ingredient1:string\": \"\uC7AC\uB8CC1\",\n \"Ingredient2:string\": \"\uC7AC\uB8CC2\",\n
\"Taste1:Taste_Enum\": \"\uB9DB1\",\n \"Taste2:Taste_Enum\": \"\uB9DB2\",\n
\"Sprite:Sprite\": \"Addressable \uC774\uBBF8\uC9C0 \uC774\uB984\"\n },\n
{\n \"Id:string\": \"Food001\",\n \"Name:string\": \"\uD587\uBE5B\uC218\uD504\",\n
\"Cookware_Enum\": \"Pot\",\n \"Ingredient1:string\": \"\uADF9\uB77D\uC300\",\n
\"Ingredient2:string\": \"\uD587\uBE5B\uB2F9\uADFC\",\n \"Taste1:Taste_Enum\":
\"Bitter\",\n \"Taste2:Taste_Enum\": \"Sweet\",\n \"Sprite:Sprite\":
\"Gold\"\n },\n {\n \"Id:string\": \"Food002\",\n \"Name:string\":
\"B\",\n \"Cookware_Enum\": \"FryingPan\",\n \"Ingredient1:string\":
1,\n \"Ingredient2:string\": 1,\n \"Taste1:Taste_Enum\": \"Spicy\",\n
\"Taste2:Taste_Enum\": \"Bitter\",\n \"Sprite:Sprite\": \"\"\n },\n
{\n \"Id:string\": \"Food003\",\n \"Name:string\": \"C\",\n
\"Cookware_Enum\": \"Pot\",\n \"Ingredient1:string\": 2,\n \"Ingredient2:string\":
2,\n \"Taste1:Taste_Enum\": \"Fresh\",\n \"Taste2:Taste_Enum\": \"None\",\n
\"Sprite:Sprite\": \"\"\n },\n {\n \"Id:string\": \"Food004\",\n
\"Name:string\": \"D\",\n \"Cookware_Enum\": \"Plating\",\n \"Ingredient1:string\":
3,\n \"Ingredient2:string\": 3,\n \"Taste1:Taste_Enum\": \" \",\n
\"Taste2:Taste_Enum\": \"Salty\",\n \"Sprite:Sprite\": \"Gold\"\n }\n
],\n \"ItemData\": [\n {\n \"Id\": \"\uC2DD\uBCC4\uBC88\uD638\",\n
\"ItemType_Enum\": \"\uC544\uC774\uD15C\uD0C0\uC785\"\n },\n {\n
\"Id\": \"Item001\",\n \"ItemType_Enum\": \"Food\"\n },\n {\n
\"Id\": \"Item002\",\n \"ItemType_Enum\": \"Prop\"\n },\n {\n
\"Id\": \"Item003\",\n \"ItemType_Enum\": \"Interactable\"\n }\n ]\n}"
MaxLogs: 100 MaxLogs: 100

View File

@ -9,10 +9,10 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 68f7086db4e68fc4d913633d06d803f0, type: 3} m_Script: {fileID: 11500000, guid: 23d26ce5ffaf3e44bb79a4d77ead320d, type: 3}
m_Name: FoodSo m_Name: FoodDataSo
m_EditorClassIdentifier: m_EditorClassIdentifier:
FoodList: FoodDataList:
- Id: Food001 - Id: Food001
Name: "\uD587\uBE5B\uC218\uD504" Name: "\uD587\uBE5B\uC218\uD504"
Cookware: 1 Cookware: 1
@ -20,7 +20,7 @@ MonoBehaviour:
Ingredient2: "\uD587\uBE5B\uB2F9\uADFC" Ingredient2: "\uD587\uBE5B\uB2F9\uADFC"
Taste1: 1 Taste1: 1
Taste2: 2 Taste2: 2
Sprite: {fileID: 21300000, guid: e15933f76da90e742866563b5cd9e45f, type: 3} Sprite: {fileID: 0}
- Id: Food002 - Id: Food002
Name: B Name: B
Cookware: 2 Cookware: 2
@ -44,4 +44,4 @@ MonoBehaviour:
Ingredient2: 3 Ingredient2: 3
Taste1: 5 Taste1: 5
Taste2: 6 Taste2: 6
Sprite: {fileID: 21300000, guid: e15933f76da90e742866563b5cd9e45f, type: 3} Sprite: {fileID: 0}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: f38617ba14522db4d87bb7e10c280a2d guid: 8261ff435a6e2484086e02e556c0ba93
NativeFormatImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 11400000 mainObjectFileID: 11400000

View File

@ -9,22 +9,13 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7b5deaa05a95b394fb6f6fd6a450e445, type: 3} m_Script: {fileID: 11500000, guid: a9a45b736c555724bbc4b3a46116b356, type: 3}
m_Name: ItemSo m_Name: ItemDataSo
m_EditorClassIdentifier: m_EditorClassIdentifier:
ItemList: ItemDataList:
- Id: Item001 - Id: Item001
Name: "\uB098\uBB34\uC7A5\uD310"
ItemType: 1 ItemType: 1
CellSizeX: 1
CellSizeY: 1
- Id: Item002 - Id: Item002
Name: "\uD14C\uC774\uBE14"
ItemType: 2 ItemType: 2
CellSizeX: 2
CellSizeY: 2
- Id: Item003 - Id: Item003
Name: "\uC804\uB4F1"
ItemType: 3 ItemType: 3
CellSizeX: 0
CellSizeY: 0

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c2be393a39588b647bacdd69f47f677d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 07d32adeac9e96e4ca9cc90de1b3fa4b

View File

@ -1,12 +0,0 @@
// <auto-generated> File: FoodSo.cs
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "FoodSo", menuName = "GoogleSheet/FoodSo")]
public class FoodSo : ScriptableObject
{
public List<Food> FoodList;
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 68f7086db4e68fc4d913633d06d803f0

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: ae55dc0aec9727b4a8cfbb29172ad176

View File

@ -1,12 +0,0 @@
// <auto-generated> File: ItemSo.cs
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "ItemSo", menuName = "GoogleSheet/ItemSo")]
public class ItemSo : ScriptableObject
{
public List<Item> ItemList;
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 7b5deaa05a95b394fb6f6fd6a450e445

View File

@ -1,23 +0,0 @@
// <auto-generated>
using System;
using UnityEngine;
namespace DDD
{
[Serializable]
public class Monster
{
/// <summary>식별번호</summary>
[Tooltip("식별번호")]
public string Id;
/// <summary>이름</summary>
[Tooltip("이름")]
public string Name;
/// <summary>테스트1</summary>
[Tooltip("테스트1")]
public int T1;
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 0b53849f7f9a9ad4f85656f3563afb61

View File

@ -1,12 +0,0 @@
// <auto-generated> File: MonsterSo.cs
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
[CreateAssetMenu(fileName = "MonsterSo", menuName = "GoogleSheet/MonsterSo")]
public class MonsterSo : ScriptableObject
{
public List<Monster> MonsterList;
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 7e1500a3fc388674fa8ef2759d5d1c95

View File

@ -1,27 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e1500a3fc388674fa8ef2759d5d1c95, type: 3}
m_Name: MonsterSo
m_EditorClassIdentifier:
MonsterList:
- Id: Test001
Name: A
T1: 1
- Id: Test002
Name: B
T1: 2
- Id: Test003
Name: C
T1: 3
- Id: Test004
Name: D
T1: 4