수치를 에셋에서 텍스트 파일로 분리합니다
공 속도, 스테이지별 블록 체력, 속도 증가 타이밍 같은 밸런스 데이터는 ScriptableObject나 인스펙터에 박아 두면 값을 바꿀 때마다 Unity 에디터 재생을 멈추거나 재빌드해야 합니다. StreamingAssets 폴더에 balance.json을 두면 텍스트 에디터에서 수정을 바로 반영할 수 있습니다.
using System;
using System.IO;
using UnityEngine;
[Serializable]
public class StageConfig
{
public int id;
public int rows;
public int baseHp;
}
[Serializable]
public class GameBalanceData
{
public float baseSpeed = 13f;
public float minElevationDeg = 12f;
public float[] speedUpThresholds;
public StageConfig[] stages;
}JsonUtility의 최상위 배열 한계 극복
Unity 내장 JsonUtility는 최상위 루트가 배열인 JSON([ { ... }, { ... } ])을 직접 파싱하지 못합니다. 루트를 객체로 감싸고 필드에 배열을 두는 래퍼 클래스를 선언해야 파서 오류 없이 빠르게 로드할 수 있습니다.
using System.IO;
using UnityEngine;
public static class BalanceLoader
{
public static GameBalanceData Load()
{
string path = Path.Combine(Application.streamingAssetsPath, "balance.json");
if (!File.Exists(path))
{
Debug.LogWarning("balance.json not found, using defaults.");
return new GameBalanceData();
}
string json = File.ReadAllText(path);
return JsonUtility.FromJson<GameBalanceData>(json);
}
}모바일 플랫폼 경로 분기
Android에서는 StreamingAssets 폴더가 APK/AAB 압축 파일 안에 들어가므로 File.ReadAllText 대신 UnityWebRequest를 사용하거나, 첫 실행 시 persistentDataPath로 복사한 뒤 읽도록 분기해야 합니다.
검증 범위
공식 문서 대조
검증일
Unity 공식 문서와 본문의 코드·절차를 대조해 공개 준비 상태로 전환했습니다. 별도 Unity 프로젝트나 실기기에서 직접 재현한 결과는 아니며, 특정 버전·기기 문의가 들어오면 해당 환경에서 후속 확인합니다.
확인한 공식 문서Unity StreamingAssets 매뉴얼 ↗