🎮 Unity 개발/Unity

Unity [SerializeField]

gameuiux 2024. 12. 25. 17:43
728x90
반응형

[SerializeField]

유니티에서 Private 변수를 인스펙터 창에서 노출할 수 있도록 하는 속성이다.

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

public class test01 : MonoBehaviour
{

    [SerializeField] private int health = 100;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

// private 접근 제한자: 변수는 클래스 외부에서 접근할 수 없다.
// [SerializeField] 속성: 인스펙터에서 변수의 값을 편집할 수 있게 해준다.

 

 

 

 

왜 필요한가?

public 변수는 인스펙터에 자동으로 표시되고, private 변수는 인스펙터에 표시되지 않는다.

 

문제점
캡슐화 유지: 변수를 public으로 설정하면 코드 외부에서 직접 접근 가능하여 데이터의 무결성이 깨질 수 있다.
보안 및 관리: private 변수는 코드 내에서만 제어되어야 하지만, 편집 가능한 변수가 필요할 수 있다.
해결책: [SerializeField]를 사용하여 private 변수를 인스펙터에 노출시킬 수 있다.

 

 

 

주의사항

- 인스펙터에서 값을 변경하면 코드에서 설정한 초기값은 사용되지 않는다. 값 초기화는 인스펙터 값을 우선시하기 때문이다.


- 실시간 업데이트 불가능
코드를 수정해도, 인스펙터에서 설정한 값은 그대로 유지된다. 새 값 적용 시 초기화해야 한다.

 

- 지원하지 않는 변수 유형
[SerializeField]는 대부분의 기본 데이터 타입과 Unity 객체 타입만 지원한다.
지원되지 않는 타입(딕셔너리 등)은 사용자 정의 방법으로 직렬화해야 한다.

 

 

 

활용 예시 - 커스텀 에디터와 조합

[SerializeField]는 커스텀 에디터(Custom Editor)와 함께 사용하여 더 직관적인 UI를 만들 수 있다.

[SerializeField] private Color playerColor = Color.red; // 인스펙터에 색상 선택기 제공
[SerializeField] private GameObject weaponPrefab;       // 프리팹 할당 가능
[SerializeField] private AnimationCurve curve;          // 곡선 그래프 설정 가능

 

728x90
반응형