이번 글에서는 아이템 제작 -저장 구현한것을 정리해보겠습니다.
먼저 전달해야 하는 변수들을 선언합니다.
//전달 해야하는 변수들
private string createItemName;
private int createItemprice;
private string createItemText;
ItemTpyes createItemtype;
Condition createItemcon;
private Sprite settingSprite;
enum 기반 드랍 다운과 스크롤 뷰를 제외한 것들이 완성이 되었으면 이제
스크립트로 넘어가보겠습니다.
저장을 하기 전 빈 ItemData 생성을 해야 합니다.
ItemData temp = ScriptableObject.CreateInstance<ItemData>();
ScriptableObject.CreateInstance<data >() 는 빈 data의 오브젝트를 생성하는 함수 입니다.
void SetField(string fieldName, object value)
{
typeof(ItemData).GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance)
?.SetValue(temp, value);
}
이제 SetField()는 리플렉션을 사용해 비공개 필드에 값 설정을 합니다.
BindingFlags.NonPublic 는 비공개 인스턴스 필드(private 등)에 접근하기 위한 옵션입니다.
indingFlags.Instance 는 static이 아닌 일반 인스턴스 대상을 말합니다.
위에 있는 두개를 합치면 private로 선언된 인스턴스 변수에 접근이 가능합니다.
SetField("itemName", createItemName);
이제 이름, 처음 작성한 변수명을 넣는다면 메모리에 추가 할수 있습니다.
하지만 메모리에만 있으면 엔진을 껏다 키거나 아니면 게임을 껏다 키면 추가한 데이터가 삭제가 됩니다.
그러면 .asset 파일로 저장하는 툴을 구현하면 엔진을 껏다 키거나 게임을 껏다
키더라도 데이터가 되지 않습니다.
ItemData tempItem = CreateTempItem();
ItemSaveTool.SaveItemAsset(tempItem, createItemName);
#if UNITY_EDITOR
//using UnityEditor;
#endif
public static class ItemSaveTool
{
#if UNITY_EDITOR
public static void SaveItemAsset(ItemData itemData, string fileName)
{
string dirPath = "Assets/Datas/ItemData";
if (!Directory.Exists(dirPath))
Directory.CreateDirectory(dirPath);
string path = $"{dirPath}/{fileName}.asset";
AssetDatabase.CreateAsset(itemData, path);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
#endif
}
이렇게 작성을 하면 저장이 됩니다.


'유니티 개발 > 사이드 뷰 게임' 카테고리의 다른 글
| Unity 2D - 사운드 조절 기능 추가 (3) | 2025.08.02 |
|---|---|
| Unity 2D 아이템 제작 - Enum 기반 드롭 다운 및 스크롤 리스트 생성 (0) | 2025.07.21 |
| Unity 2D 아이템 제작 -이미지 미리보기 (0) | 2025.07.20 |
| Unity 2D 아이템 제작 - 기본 베이스 (0) | 2025.07.20 |
| Unity 2D 보스 - 특수 공격 (0) | 2025.07.20 |