2024-07-22

public class SomeClass : MonoBehaviour
{
[SerializeField] private int intValue = 2;
// private int intValue = 2; 로 변경
private void Start()
{
Debug.Log(intValue);
}
}
Q. 인스펙터에서 intValue의 값을 3으로 변경하고,
intValue 앞에 선언된 [SerializeField]를 제거했을 때,
Debug.Log(intValue)' 의 출력 결과는 어떻게 될까요?
A. SerializeField 를 제거하면, 인스펙터에 intValue 가 노출되지 않고,
인스펙터에서 값을 3으로 변경했더라도,
[SerializeField] 가 없으므로 저장되지 않고,
런타임 중에는 기본 값인 2로 설정된다.
따라서, 2가 출력된다.
public class SomeClass : MonoBehaviour
{
public int intValue = 2;
// [HideInInspector] public int intValue = 2; 로 변경
private void Start()
{
Debug.Log(intValue);
}
}
Q. 인스펙터에서 intValue의 값을 3으로 변경하고,
intValue 앞에 [HideInInspector]를 추가했을 때,
Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
A. intValue 는 public 으로 선언되어 있지만, 인스펙터에서는 숨겨진다.
이미 인스펙터에서 값을 3으로 변경한 상태라면, Unity 는 이 값을 저장한 상태이다.
따라서, 3이 출력된다.
SerializeField 와 public 접근 제어자, 그리고 Unity 의 직렬화 방식 때문이다.
private 으로 선언되어 있고, [SerializeField] 를 사용하여 인스펙터에 노출되고,
[SerializeField]를 제거하여, 기본값인 2로 초기화된다.
public 으로 선언되어 있고, [HideInInspector] 특성을 사용하여 인스펙터에서 숨겨진다.
public 필드가 직렬화되어 인스펙터에 값이 저장되어, 3으로 저장된다.
Q. CSV/JSON 등 데이터 저장 포맷에 대해 설명하고, 활용에 적절한 상황은?
A.
CSV (Comma-Separated Values)
JSON (JavaScript Object Notation)
Q. 특정 데이터를 JSON으로 활용하기 위해 해야하는 작업은 무엇인가 ?
A.
특정 데이터를 JSON 으로 활용하기 위해서
1. 데이터 구조를 설계, 정의한다.
2. 객체 생성 : 데이터를 표현할 클래스르 정의하고, 해당 클래스의 인스턴스를 생성한다.
3. 직렬화 : 정의한 객체를 JSON 문자열로 변환한다.
4. 저장 및 로드 : JSON 문자열을 파일에 저장 (직렬화) 하거나, JSON 문자열을 객체로 역직렬화한다.
Q.Unity에서 필드를 직렬화하려면 어떻게 해야하는지 설명해주세요
A.
1. [SerializeField] 특성
2. public 접근 제어자
그동안 [SerializeField] 는 사용해봤지만
[HideInInspector] 는 처음 본 키워드라 생소했다.
또한, CSV 파일을 통한 데이터 저장 포맷은 아직 적용해본 적이 없어,
대사나 레벨 데이터 등을 저장하고 불러올 때 사용해보면 좋을 것 같다.