유니티

[C#, 유니티] 게임 개발 - [SerializeField]와 [System.Serializable] 차이점

맛난과자 2024. 1. 6. 21:15

Unity에서 많이 쓰던데 왜 쓰는 걸까?

요약

어트리부트(Attribute) 기능
SerializeField private로 선언된 변수를 인스펙터에 노출시킴 
System.Serializable MonoBehaviour 이외의 클래스 멤버들을 인스펙터에 노출시킴

 

↓↓ 자세한 내용이 알고 싶으면 내려가기↓↓

 

 

1. SerializeField

유니티에서 SerializeField는 private 필드의 직렬화를 위해 이용된다.

 

직렬화란? 객체가 메모리에 보존되지 않아도 저장이나 전송을 할 수 있게 만드는 것.

 

원래는 public을 이용하여 직렬화가 가능하도록 하며 인스펙터에서 특정 변수의 값을 변경할 수 있게 한다.

 

그러나 필요에 의해 private 필드를 써야할 경우, [SerializeField]를 작성하여 직렬화할 수 있다.

[SerializeField] GameObject goComboImage = null;
[SerializeField] UnityEngine.UI.Text txtCombo = null;

 

이로써 작업창의 Inspector에 'goComboImage'와 'txtCombo'가 뜨게 되었다.

 

 

2. System.Serializable

이또한 직렬화에 사용된다.

 

다만 System.Serializable은 타입 전체를 직렬화할 수 있겠끔 한다.

 

class나 struct 위에 선언한다.

[System.Serializable]
public class ObjectInfo
{
    public GameObject goPrefab;
    public int count;
    public Transform tfPoolParent;
}

 

Serializable을 이용하여 코드를 작성하고, Scene을 확인해보자.

 

 

이제 스크립트 밖에서도 설정을 변경할 수 있게 되었다.