07/21 ScriptableObject를 활용한 데이터 분리 설계

ScriptableObject
게임 데이터를 GameObject와 분리해 .asset 파일로 관리하는 클래스
| ScriptableObject | MonoBehaviour |
|---|---|
| 데이터 관리가 주목적 | 오브젝트 동작 구현이 주목적 |
| 에셋으로 존재 | GameObject에 컴포넌트로 부착 |
| GameObject가 필요 없음 | GameObject가 필요함 |
| 아이템·스킬·스탯 등에 사용 | 이동·공격·충돌 등에 사용 |
| 구분 | string | StringBuilder |
|---|---|---|
| 네임스페이스 | System | System.Text |
| 객체 특성 | 불변 객체(Immutable) | 가변 객체(Mutable) |
| 문자열 변경 | 변경할 때마다 새로운 문자열 생성 | 내부 버퍼의 내용을 변경 |
| 문자열 연결 | 적은 횟수의 연결에 적합 | 반복적인 문자열 연결에 적합 |
| 성능 | 반복 연결 시 성능이 저하될 수 있음 | 반복 연결 시 효율적 |
| 메모리 | 중간 문자열 객체가 많이 생성될 수 있음 | 불필요한 객체 생성을 줄임 |
| 사용 방법 | +, 문자열 보간 $"" | Append(), AppendLine() |
| 스레드 안전성 | 불변이므로 안전하게 공유하기 쉬움 | 기본적으로 스레드 안전하지 않음 |
| 적합한 상황 | 문자열 변경이 적을 때 | 문자열을 반복적으로 조립할 때 |
불변 객체란 객체가 한 번 생성된 후에는 내부 값을 변경할 수 없는 객체입니다.
C#의 string은 대표적인 불변 객체입니다.
string text = "Hello";
text = text + " World";
위 코드를 보면 text의 내용이 바뀐 것처럼 보이지만, 실제 동작은 다음과 같습니다.
"Hello" 문자열 객체가 생성됩니다."Hello World"라는 새로운 문자열 객체가 생성됩니다.text 변수가 새로운 문자열을 참조합니다."Hello" 문자열은 변경되지 않습니다.다음 코드를 보면 더 쉽게 이해할 수 있습니다.
반복문에서 string을 계속 연결하면 새로운 문자열 객체가 반복적으로 생성되기 때문입니다.
string result = "";
for (int i = 0; i < 10000; i++)
{
result += i;
}
반복할 때마다 다음과 같은 문자열이 새로 생성됩니다.
""
"0"
"01"
"012"
"0123"
...
기존 문자열에 내용을 직접 붙이는 것이 아니라, 기존 내용과 새로운 내용을 합친 문자열 객체를 다시 생성합니다.
문자열이 길어질수록 기존 내용을 계속 복사해야 하므로 다음 문제가 발생할 수 있습니다.
한글 폰트 만들기
CSV 파일을 파싱하여 게임 데이터 제작하기
CSV에 작성된 아이템 정보를 읽어 각 행을 ItemData 스크립터블 오브젝트 에셋으로 변환한다.
ItemData 스크립터블 오브젝트를 생성하고 파싱한 값을 저장한다..asset 파일을 생성한다.CSV 읽기 → 행과 열 분리 → 자료형 변환 → 스크립터블 오브젝트 생성 → 에셋 저장
이 방식을 사용하면 엑셀이나 스프레드시트에서 관리한 데이터를 여러 개의 Unity 게임 데이터 에셋으로 자동 변환할 수 있다.
현재 방식은 쉼표를 기준으로 단순 분리하기 때문에 설명에 쉼표가 들어가거나 값이 누락된 CSV에서는 오류가 발생할 수 있다.
새 글이 올라오면 Develog 알림으로 알려드려요
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
Develog는 단순히 글을 쓰는 공간이 아닙니다. 성장의 과정을 기록하고, 그 기록으로 나를 증명하며 원하는 기회를 얻는 곳이길 바랐습니다. 누군가의 꿈으로 향하는 중간다리가 되는 것, 그것이 Develog를 만든 이유입니다.

게임업계 취업을 준비하다 보면 조금 불편한 현실을 마주하게 됩니다. 게임회사에 들어가고 싶은 사람은 많습니다. 특히 신입 채용은 더 그렇습니다. 공고 하나에 많은 지원자가 몰리고, 회사 입장에서는 비슷한 조건의 지원자 가운데 사람을 선택할 수 있습니다. 그래서 다른 산업에서 흔히 이야기하는 “처음부터 연봉을 낮춰 부르지 마세요.” “적극적으로 협상하세요.”

우리들의 게임 발매 이야기
Develog는 단순히 글을 쓰는 공간이 아닙니다. 성장의 과정을 기록하고, 그 기록으로 나를 증명하며 원하는 기회를 얻는 곳이길 바랐습니다. 누군가의 꿈으로 향하는 중간다리가 되는 것, 그것이 Develog를 만든 이유입니다.


게임업계 취업을 준비하다 보면 조금 불편한 현실을 마주하게 됩니다. 게임회사에 들어가고 싶은 사람은 많습니다. 특히 신입 채용은 더 그렇습니다. 공고 하나에 많은 지원자가 몰리고, 회사 입장에서는 비슷한 조건의 지원자 가운데 사람을 선택할 수 있습니다. 그래서 다른 산업에서 흔히 이야기하는 “처음부터 연봉을 낮춰 부르지 마세요.” “적극적으로 협상하세요.”
