본문 바로가기
게임 프로그래밍/유니티(2021.3 LTS) 강좌

[유니티 기초] 스크립트 직렬화 (Script Serialization)

by 레오란다 2022. 10. 19.
반응형

스크립트 직렬화 (Script Serialization)

유니티에서의 스크립트 직렬화는 유니티 에디터가 데이터 구조나 오브젝트를 관리하는 일련의 프로세스를 의미합니다. 이 글에서는 직렬화 기술을 사용해 제공되는 편리한 기능에 대해 다룰 것입니다.

 

혹시 직렬화에 대해 자세히 알고 싶으신 분이 있다면 아래의 유니티 공식 문서를 참조하시기 바랍니다.

https://docs.unity3d.com/kr/2020.3/Manual/script-Serialization.html

 

스크립트 직렬화 - Unity 매뉴얼

직렬화는 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 말합니다. Unity 에디터에서는 저장 및 로딩, 인스펙터 창, 인

docs.unity3d.com

 

먼저 용어를 정의하도록 하겠습니다. 

 

프로퍼티: 클래스 내부에 선언하는 변수

필드: 인스펙터 창과 연동된 컴포넌트의 프로퍼티

 

지금은 직렬화 기술을 사용하여 유니티 에디터가 제공해주는 편리한 기능인 인스펙터 창에서 스크립트의 클래스에 선언된 변수와 연동할 수 있는 기능에 대해 다루도록 하겠습니다. 

* 클래스 내부에 선언하는 변수를 프로퍼티라고 합니다. 앞으로는 변수 대신 프로퍼티 용어를 사용하도록 하겠습니다.

* 유니티 에디터의 인스펙터 창에 연결된 프로퍼티는 "필드" 라는 용어를 사용합니다.

 

이전 글에서 큐브를 회전시키는 코드를 작성했었습니다. 여기서는 큐브를 회전시킬 때 사용했던 속도 값을 코드에서 수정하지 않고 인스펙터 창에서 변경하여 코드에 반영하는 실습을 해보도록 하겠습니다.

 

먼저 코드를 다음과 같이 수정해야 합니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeHandler : MonoBehaviour
{
   public float speed;

   // Start is called before the first frame update
   void Start()
   {
      transform.position = new Vector3(0f, 3f, 0f);      
   }

   // Update is called once per frame
   void Update()
   {
      transform.Rotate(new Vector3(0f, speed * Time.deltaTime, 0f));
   }
}

 

코드에 새롭게 추가된 

 

public float speed;

 

가 보입니다. 

 

이렇게 클래스 내부에 선언한 변수를 프로퍼티(Property) 라고 합니다.

유니티는 조건이 만족되는 프로퍼티를 직렬화를 통해 인스펙터 창에 표시해줍니다. 이를 필드(Field) 라고 부릅니다.

* 직렬화 조건은 이 글 상단에 링크된 유니티 문서 내용 중 "직렬화 규칙" 부분을 참고하시기 바랍니다.

 

Speed 필드가 추가된 모습

필드에 0이라고 되어있는 입력 칸이 보입니다. 이 부분을 마우스로 클릭하면 숫자를 입력할 수 있습니다. 다음은 Speed 필드의 값을 0, 10, 50 으로 설정하고 Play 시켰을 때의 큐브가 회전하는 모습입니다.

 

Speed: 0
Speed: 10
Speed: 50

이와 같이 인스펙터 창의 Speed 필드를 변경하고 실행하면 설정된 값이 speed 프로퍼티에 직렬화를 통해 반영되어 실행되는 것을 볼 수 있습니다.

 

이번엔 게임을 Play 한 상태에서 필드의 값을 변경해 보도록 하겠습니다.

 

Play 중 Speed 필드의 값 변경에 따른 큐브 회전 속도의 변화

 

이처럼 인스펙터 창에서 Speed 필드의 값을 변경할 때 마다 바로 반응하는 것을 볼 수 있습니다. 이 기능은 게임 개발에 있어서 많은 이점을 제공합니다. 예를 들어 캐릭터의 점프를 구현할 때 점프 높이에 관여하는 프로퍼티를 게임 실행 중 인스펙터 창의 필드 값을 변경해 가며 테스트해 볼 수 있으므로 빠르게 적절한 값을 결정할 수 있습니다. 만약 이 기능이 없다면 매번 코드 상에서 수치를 변경하고 다시 실행해 확인하는 번거로운 작업을 거쳐야합니다.

반응형

댓글