[Unity]직렬화(Serialization)

Hoojung Ahn·2024년 5월 28일

직렬화(Serialization)란?

직렬화(Serialization)는 객체의 상태를 저장하거나 전송할 수 있는 형식으로 변환하는 과정이다. 직렬화된 데이터를 사용하면 파일, 데이터베이스, 메모리, 네트워크 등을 통해 객체의 상태를 저장하거나 전송할 수 있다. 반대로, 역직렬화(Deserialization)는 저장되거나 전송된 데이터를 원래 객체로 복원하는 과정이다.

  • Unity에서의 직렬화
    Unity에서는 주로 인스펙터(Inspector)에서 사용자 정의 클래스를 편집할 수 있게 하기 위해 직렬화를 사용한다. Unity의 Serializable 속성은 클래스를 직렬화 가능하게 만들어, 인스펙터에서 해당 클래스의 필드를 편집할 수 있도록 한다.

예: 직렬화를 사용하여 게임 아이템 시스템을 구현

Item 클래스 정의:

[System.Serializable]
public class Item
{
    public string itemName;
    public int itemID;
    public float itemWeight;
}

Inventory 클래스 정의:


using UnityEngine;

public class Inventory : MonoBehaviour
{
    public Item[] items;
}
  • Unity 에디터에서 확인:

위 스크립트를 저장하고 Unity 에디터로 돌아가면, Inventory 스크립트를 붙인 게임 오브젝트를 선택했을 때 인스펙터 창에서 items 배열을 편집할 수 있게 된다.
Item 클래스가 직렬화 가능하기 때문에, 배열의 각 요소에 대해 itemName, itemID, itemWeight 필드를 인스펙터에서 설정할 수 있다.

  • Item 클래스:

System.Serializable 속성을 사용하여 클래스가 직렬화 가능하다는 것을 Unity에 알려준다.
이 클래스는 itemName, itemID, itemWeight라는 세 개의 공용 필드를 가지고 있다.

  • Inventory 클래스:

MonoBehaviour를 상속받아 Unity 컴포넌트로 사용될 수 있다.
Item 객체들의 배열인 items를 선언하여 여러 개의 Item 객체를 저장할 수 있다.

응용: 캐릭터 능력치 시스템
직렬화를 사용하여 게임 캐릭터의 능력치를 설정하는 CharacterStats 클래스를 만들어 보면

CharacterStats 클래스 정의:


[System.Serializable]
public class CharacterStats
{
    public string characterName;
    public int health;
    public int mana;
    public int strength;
    public int agility;
}

Character 클래스 정의:


using UnityEngine;

public class Character : MonoBehaviour
{
    public CharacterStats stats;
}

Unity 에디터에서 확인:

Character 스크립트를 붙인 게임 오브젝트를 선택했을 때 인스펙터 창에서 stats 필드를 편집할 수 있게 된다.
CharacterStats 클래스가 직렬화 가능하기 때문에, 각 캐릭터의 characterName, health, mana, strength, agility 필드를 인스펙터에서 설정할 수 있다.

요약
직렬화는 객체를 저장하거나 전송할 수 있는 형식으로 변환하는 과정이다.
Unity에서의 직렬화는 Serializable 속성을 사용하여 사용자 정의 클래스나 구조체의 데이터를 인스펙터에서 편집할 수 있도록 한다.
예시로 게임 아이템 시스템과 캐릭터 능력치 시스템을 구현하여 직렬화를 통해 인스펙터에서 데이터를 편집할 수 있게 했다.
이렇게 하면 게임 개발 시 데이터를 구조화하고 관리하기가 더 쉬워지며, Unity 에디터 내에서 직관적으로 데이터를 설정할 수 있다.

0개의 댓글