https://docs.unity3d.com/ScriptReference/SerializeField.html
Unity - Scripting API: SerializeField
When Unity serializes your scripts, it only serializes public fields. If you also want Unity to serialize your private fields you can add the SerializeField attribute to those fields. Unity serializes all your script components, reloads the new assemblies,
docs.unity3d.com
SerializeField는 Unity에서 직렬화할 때 필요한 프라이빗 변수를 인스펙터에서 접근 가능하게 만드는 속성(Attribute)이다
이 어트리뷰트는 주로 MonoBehaviour 클래스의 멤버 변수들에 사용되며, 해당 변수를 인스펙터에서 수정할 수 있도록한다.
일반적으로 Unity에서는 인스펙터에서만 값을 지정할 수 있는데, 이를 위해 멤버 변수를 public 으로 선언하는 경우가 있다.
그런데 이는 객체 지향 프로 그래밍의 캡슐화 원칙을 위배하거나 보안상의 이슈를 일으킬 수 있도 있다고 한다.
SerializeField를 사용하면 멤버 변수를 private로 유지하면서도 해당 변수의 값을 인스펙터에서 설정할 수 있습니다.
이를 통해 변수에 직접 접근하지 않고도 Unity의 직렬화 시스템이 값을 올바르게 처리할 수 있습니다.
using UnityEngine;
public class Example : MonoBehaviour
{
// SerializeField 어트리뷰트를 사용하여 private 변수를 인스펙터에서 수정 가능하게 함
[SerializeField]
private int myPrivateVariable = 42;
// 다른 코드
}
이렇게 하면 `myPrivateVariable`은 `private`이지만 인스펙터에서 해당 변수에 접근하여 값을 설정할 수 있다.
직렬화(Serialization)는 데이터를 다른 형식으로 변환하여 저장하거나 전송하는 과정을 나타낸다. Unity에서 주로 사용되는 직렬화는 두 가지가 존재한다.
데이터 저장 및 로드: Unity에서는 게임 오브젝트의 상태를 저장하고 나중에 불러오기 위해 데이터를 파일에 저장하는 경우가 많은데 이때, 데이터를 파일에 쓰거나 읽을 때 직렬화가 사용된다. 일반적으로 XML, JSON, 또는 binary 형식으로 데이터를 직렬화하여 저장하며, Unity는 `JsonUtility`나 `BinaryFormatter`와 같은 도구를 제공한다.
인스펙터와의 상호 작용: Unity에서는 인스펙터 창에서 게임 오브젝트 및 스크립트의 변수를 조작하고 실시간으로 변경할 수 있다.
이때도 직렬화가 사용되며, `SerializeField` 속성을 통해 특정 변수를 인스펙터에서 수정 가능하도록 제공한다.
Unity는 이러한 직렬화를 통해 게임 상태를 영구적으로 저장하거나 인스펙터에서 손쉽게 수정할 수 있도록 지원하여, 게임의 개발 및 유지보수를 용이하게 합니다.
'Unity' 카테고리의 다른 글
[Unity #] 유니티에서 Font-awesome 사용하기 (0) | 2024.01.29 |
---|---|
[Unity #] Rigidbody? Collider? (1) | 2024.01.23 |
[Unity C#] Vector3 (0) | 2024.01.22 |
2024-01-10 (0) | 2024.01.10 |
2024_01_08 (0) | 2024.01.08 |