내일배움캠프/TIL

[내배캠][Unity6기][TIL] UGS 데이터 로드

binary는 호남선 2024. 12. 2. 21:22

팀원분께서 UGS 패키지 세팅과 공유 폴더까지 미리 준비해주셔서 구글 스프레드시트로 작성하고 받아와서 SO로 파싱만 하면 된다!

이전에 받아온 데이터로만 SO가 생성되는 문제가 있어서 추후 수정이 필요하다.

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using Human_Data;

public class HumanDataLoader : MonoBehaviour
{
    [MenuItem("Tools/Update HumanSO from JSON")]
    public static void UpdateHumanSOFromJSON()
    {
        // JSON 파일 리스트로 로드
        List<Human_Data.HumanData> humanDataList = Human_Data.HumanData.GetList();
        
        string savePath = "Assets/Resources/SO/Human/";  // SO 저장할 경로 설정

        foreach (HumanData humanData in humanDataList)
        {
            // 경로에 SO 있는지 확인하고 없으면 새로 생성
            string soPath = $"{savePath}HumanSO_{humanData.id}.asset";
            HumanSO humanSO = AssetDatabase.LoadAssetAtPath<HumanSO>(soPath);
            if (humanSO == null)
            {
                humanSO = ScriptableObject.CreateInstance<HumanSO>();
                AssetDatabase.CreateAsset(humanSO, soPath);
            }

            // 새로운 값으로 갱신
            humanSO.id = humanData.id;
            humanSO.maxFear = humanData.maxFear;
            humanSO.minFatigueInflicted = humanData.minFatigueInflicted;
            humanSO.maxFatigueInflicted = humanData.maxFatigueInflicted;
            humanSO.cooldown = humanData.cooldown;
            humanSO.speed = humanData.speed;
            humanSO.lifeInflicted = humanData.lifeInflicted;
            humanSO.coin = humanData.coin;

            EditorUtility.SetDirty(humanSO);    // 에디터에 반영
        }

        // 에셋에 변경 내용 적용
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        Debug.LogAssertion("HumanSO assets updated successfully!");
    }
}