Unity 에서 Newtonsoft Json 사용

이준영·2025년 11월 11일

Json

  • JavaScript Object Notation의 약자로, 데이터를 교환하고 저장하기 위해 설계된 텍스트 기반의 데이터 교환 표준

  • 사람이 읽기 쉽고 컴퓨터가 파싱(분석)하기도 쉬워서, 웹 서버와 클라이언트(브라우저) 사이에서 데이터를 전송할 때, 또는 설정 파일 등에 XML을 대체하여 널리 사용

장점

  1. Text를 사용하기 때문에 사람이 이해하기 쉬움.
  2. Object <-> Json 데이터 변환이 쉬움.

단점

  1. 작은 문법 오류에도 민감하게 반응.
    • 중간에 중괄호, 대괄호, 콜론, 쉼표 하나라도 빠지면 Json 파일이 깨져버림.
    • Json 검사기 활용 권장.

구조

  1. 객체

    • 중괄호 {}로 감싸서 표현

    • 순서가 없는 이름/값 쌍의 집합

    • 이름(키)은 반드시 큰따옴표로 묶인 문자열이어야 하며, 콜론(:)으로 값과 구분하고, 각 쌍은 쉼표(,)로 구분

    형태예시
    { "key" : value }{"name": "Gemini", "age": 1}
  1. 배열 (Array)

    • 대괄호 []로 감싸서 표현

    • 값들의 순서 있는 리스트

    • 값들은 쉼표(,)로 구분

    형태예시
    [ value1, value2, ... ]["apple", "banana", "kiwi"]

Newtonsoft Json

  • 유니티에서 복잡한 JSON 데이터를 다룰 때 Unity의 내장 JsonUtility보다 강력한 기능과 유연성을 제공
  • Newtonsoft Json

설치 방법

설치 방법
  • 프로젝트를 켜고 Window -> Package Manager
설치 방법
  • 왼쪽 위 + -> Add Package by name 클릭
설치 방법
  • com.unity.nuget.newtonsoft-json 입력. -> Add
설치 완료

사용 예시

Test Data
  • 테스트 데이터용 클래스이다.

직렬화

DataSerializer
  • Object -> Json으로 바꾸는 클래스이다.
Test

역직렬화

DataDeserializer
  • Json -> Object로 바꾸는 클래스이다.
Test

주의점

MonoBehaviour를 상속 받은 클래스 직렬화 문제

ErrorTest
  • 에러 테스트를 위한 테스트 데이터 클래스.
Test Code
Test
  • 자기 참조 루프로 인해 생긴 오류.
  • 유니티에선 gameObject.gameObject.gameObject... 를 호출할 수 있는 순환구조로 인해 발생
  • -> Newtonsoft Json로 MonoBehaviour를 상속 받는 클래스를 직렬화 해선 안됨.
  • 스크립트가 가지고 있는 프로퍼티 중에서 필요한 프로퍼티를 클래스로 묶어서 해당 클래스만 직렬화 필요.

Vector3 직렬화 문제

ErrorTest
Test Code
Test
  • 위와 마찬가지로 자기 참조 루프로 인해 생긴 오류.
  • normalized.normalized.normalized... 를 호출할 수 있는 순환구조로 인해 발생.
  • -> 직렬화 할 수 있는 Vector3 클래스를 새로 구현하는 방법 추천
profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글