스크립트 직렬화 (Script Serialization)
유니티에서의 스크립트 직렬화는 유니티 에디터가 데이터 구조나 오브젝트를 관리하는 일련의 프로세스를 의미합니다. 이 글에서는 직렬화 기술을 사용해 제공되는 편리한 기능에 대해 다룰 것입니다.
혹시 직렬화에 대해 자세히 알고 싶으신 분이 있다면 아래의 유니티 공식 문서를 참조하시기 바랍니다.
https://docs.unity3d.com/kr/2020.3/Manual/script-Serialization.html
먼저 용어를 정의하도록 하겠습니다.
프로퍼티: 클래스 내부에 선언하는 변수
필드: 인스펙터 창과 연동된 컴포넌트의 프로퍼티
지금은 직렬화 기술을 사용하여 유니티 에디터가 제공해주는 편리한 기능인 인스펙터 창에서 스크립트의 클래스에 선언된 변수와 연동할 수 있는 기능에 대해 다루도록 하겠습니다.
* 클래스 내부에 선언하는 변수를 프로퍼티라고 합니다. 앞으로는 변수 대신 프로퍼티 용어를 사용하도록 하겠습니다.
* 유니티 에디터의 인스펙터 창에 연결된 프로퍼티는 "필드" 라는 용어를 사용합니다.
이전 글에서 큐브를 회전시키는 코드를 작성했었습니다. 여기서는 큐브를 회전시킬 때 사용했던 속도 값을 코드에서 수정하지 않고 인스펙터 창에서 변경하여 코드에 반영하는 실습을 해보도록 하겠습니다.
먼저 코드를 다음과 같이 수정해야 합니다.
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) 라고 부릅니다.
* 직렬화 조건은 이 글 상단에 링크된 유니티 문서 내용 중 "직렬화 규칙" 부분을 참고하시기 바랍니다.
필드에 0이라고 되어있는 입력 칸이 보입니다. 이 부분을 마우스로 클릭하면 숫자를 입력할 수 있습니다. 다음은 Speed 필드의 값을 0, 10, 50 으로 설정하고 Play 시켰을 때의 큐브가 회전하는 모습입니다.
이와 같이 인스펙터 창의 Speed 필드를 변경하고 실행하면 설정된 값이 speed 프로퍼티에 직렬화를 통해 반영되어 실행되는 것을 볼 수 있습니다.
이번엔 게임을 Play 한 상태에서 필드의 값을 변경해 보도록 하겠습니다.
이처럼 인스펙터 창에서 Speed 필드의 값을 변경할 때 마다 바로 반응하는 것을 볼 수 있습니다. 이 기능은 게임 개발에 있어서 많은 이점을 제공합니다. 예를 들어 캐릭터의 점프를 구현할 때 점프 높이에 관여하는 프로퍼티를 게임 실행 중 인스펙터 창의 필드 값을 변경해 가며 테스트해 볼 수 있으므로 빠르게 적절한 값을 결정할 수 있습니다. 만약 이 기능이 없다면 매번 코드 상에서 수치를 변경하고 다시 실행해 확인하는 번거로운 작업을 거쳐야합니다.
'게임 프로그래밍 > 유니티(2021.3 LTS) 강좌' 카테고리의 다른 글
[유니티 기초] 충돌 처리 (Rigidbody, Colliders) (0) | 2022.10.21 |
---|---|
[유니티 기초] 키보드, 마우스 입력 처리 (0) | 2022.10.20 |
[유니티 기초] 오브젝트 회전과 Time.deltaTime (0) | 2022.10.18 |
[유니티 기초] 스크립트의 이해와 코드 작성 (0) | 2022.10.14 |
[유니티] 인스펙터 창과 컴포넌트 및 스크립트 컴포넌트 추가 (0) | 2022.10.13 |
댓글