본문 바로가기

내일 배움 캠프/뭐하지

기획 테이블 활용

[고정형 데이터와 변동성 데이터 관리 전략]

게임 개발에서는 데이터를 크게 고정형 데이터와 변동성 데이터 두 가지 유형으로 구분할 수 있다.

각각의 개념과 Unity에서 이를 효율적으로 관리하는 방법에 대해 정리한다.

 

고정형 데이터

    ● 게임의 룰, 설정값, 밸런스와 같이 런타임 중 변경되지 않는 정보

    ● 보통 외부 파일이나 ScriptableObject를 통해 관리되며 게임 로직의 기반을 구성하는 데 사용된다.

 

    ● 대표 예시

        ○ 무기 종류 및 스탯 테이블

        ○ 캐릭터의 레벨별 능력치

        ○ 몬스터 출현 정보

        ○ 스테이지 구성 및 맵 설정

 

    ● ScriptableObject 예시

[CreateAssetMenu]
public class WeaponData : ScriptableObject
{
    public string id;
    public int damage;
    public float cooldown;
}

 

    ● 관리 방법

        ○ Unity 내부에서는 ScriptableOjbect를 활용

        ○ 외부 관리가 필요한 경우 JSON 등의 포맷으로 작성한 데이터를 로드하여 Dictionary나 List로 변환

        ○ Resources 또는 Addressables를 통해 동적 로딩 가능

 

변동성 데이터

    ● 게임을 플레이하면서 계속해서 변경되는 정보

    ● 저장과 불러오기, 동기화의 대상이 되며 세이브/로드 시스템과 밀접한 관련이 있다.

 

    ● 대표 예시

        ○ 플레이어의 현재 경험치, 체력, 장비 상태

        ○ 퀘스트 진행 상황

        ○ 클리어한 스테이지 기록

        ○ 게임 설정(볼륨, 언어 등)

 

    ● 저장 구조 예시

        ○ Unity에서는 직렬화 가능한 구조체나 클래스를 기반으로 데이터를 저장하며 List<T>는 문제 없이 사용 가능하지만 Dictionary는 JSON 저장 시 별도의 처리 또는 커스텀 컨버터가 필요하다.

[System.Serializable]
public class PlayerSaveData
{
    public int level;
    public float currentHP;
    public List<string> ownedItemIds;
    public string lastStage;
}

 

JSON 직렬화 및 저장

    ● Unity에서는 JsonUtility를 활용하여 간단하게 데이터를 JSON 문자열로 직렬화하거나 역직렬화할 수 있다.

 

    ● 직렬화

PlayerSaveData data = new PlayerSaveData();
string json = JsonUtility.ToJson(data);

    ● 저장

string path = Application.persistentDataPath + "/save.json";
File.WriteAllText(path, json);

    ● 불러오기

        ○ Application.persistentDataPath는 플랫폼에 따라 자동으로 경로를 설정해 주며 Android/iOS/Windows 등 모든 환경에 대응된다.

if (File.Exists(path))
{
    string loaded = File.ReadAllText(path);
    data = JsonUtility.FromJson<PlayerSaveData>(loaded);
}

 


 

[기획 데이터 테이블 활용 전략]

데이터 중심 설계가 강조되는 현대 겡미 환경에서는 기획자가 데이터를 직접 수정하고 관리할 수 있는 체계가 개발 초기부터 구축되어 있어야 함

 

기획자 협력의 중요성

    ● 기획 데이터는 지속적으로 수정되고 업데이트된다.

    ● 모든 작업을 프로그래머가 전담할 경우 개발 속도 저하 및 의사소통 오류가 발생할 수 있다.

    ● 이를 방지하기 위해서는 다음과 같은 구조가 필요하다.

        ○ 기획자가 데이터를 직접 수정 가능

        ○ 데이터 구조는 단순하고 명확하게 유지

        ○ 수정된 데이터를 바로 게임에 반영될 수 있는 포맷으로 제공

 

기획 테이블 활용 방식

    ● 기획자들은 주로 엑셀 기반으로 데이터를 작성하며 개발자는 이를 게임 내에서 활용 가능한 포맷으로 제공한다.

 

    ● CSV 파일

        ○ 기획자가 가장 익숙한 엑셀 기반 포맷

        ○ .csv로 저장하여 Unity에서 직접 파싱하거나 JSON/SO 등으로 변환

        ○ 간단한 구조의 데이터 관리에 적합

id, name, damage, cooldown
sword_001, Iron Sword, 10, 1.2
sword_002, Silver Sword, 15, 1.0

 

    ● JSON 파일

        ○ 계층적 데이터 구조를 가진 포맷

        ○ 배열, 중첩된 데이터 등을 표현하기 용이

        ○ 엑셀 데이터를 스크립트로 JSON으로 변환하여 활용

[
  {
    "id": "sword_001",
    "name": "Iron Sword",
    "damage": 10,
    "cooldown": 1.2
  },
  ...
]

 

    ● ScriptableObject(SO)

        ○ Unity 에디터 내부에서 직관적으로 데이터 관리 가능

        ○ 직렬화된 데이터 형태로 성능과 직결되는 요소에 유리

        ○ 에디터 확장을 통해 기획자도 직접 수정 가능

[CreateAssetMenu]
public class WeaponData : ScriptableObject
{
    public string id;
    public string name;
    public int damage;
    public float cooldown;
}

 

    ● 서버 데이터

        ○ 실시간 변경이 필요한 경우 서버 데이터를 활용

        ○ 라이브 서비스 중 밸런스 변경, 이벤트 설정 등에 적합

        ○ 원격에서 데이터를 조작하고 클라이언트는 이를 동적으로 반영

 

참고 링크

    ● https://github.com/npckero/ExcelToJsonWizard

 

GitHub - npckero/ExcelToJsonWizard: A tool for converting Excel data to JSON files and generating C# loader classes for use in U

A tool for converting Excel data to JSON files and generating C# loader classes for use in Unity. - npckero/ExcelToJsonWizard

github.com

'내일 배움 캠프 > 뭐하지' 카테고리의 다른 글

저작권  (3) 2025.06.22
UniTask, UniRx  (0) 2025.06.22
Addressable  (0) 2025.06.17
직렬화  (0) 2025.06.11
코드 최적화 & 프로파일러  (0) 2025.06.10