
csharp
public class SomeClass : MonoBehaviour
{
[SerializeField] private int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
**인스펙터에서 intValue의 값을 3으로 변경**하고, intValue 앞에 선언된 [SerializeField]를 제거했습니다.
csharp
private int intValue = 2;
이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
csharp
public class SomeClass : MonoBehaviour
{
public int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
**인스펙터에서 intValue의 값을 3으로 변경**하고, intValue 앞에 [HideInInspector]를 추가했습니다.
csharp
[HideInInspector] public int intValue = 2;
이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
초기 코드:
public class SomeClass : MonoBehaviour
{
[SerializeField] private int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
인스펙터에서 intValue 값을 3으로 변경:
public class SomeClass : MonoBehaviour
{
private int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
이 경우 Debug.Log(intValue);의 출력 결과는 2입니다.
SerializeField를 제거하면 인스펙터에서 변경된 값이 더 이상 유지되지 않고, 스크립트에 선언된 기본값인 2가 사용됩니다.
초기 코드:
public class SomeClass : MonoBehaviour
{
public int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
인스펙터에서 intValue 값을 3으로 변경:
[HideInInspector] public int intValue = 2;
이 경우 Debug.Log(intValue);의 출력 결과는 3입니다.
HideInInspector는 인스펙터에서 해당 변수를 숨기지만, 값은 인스펙터에서 설정된 값을 유지합니다. 따라서 intValue는 3으로 설정된 상태로 유지됩니다.
SerializeField: 이 애트리뷰트를 통해 프라이빗 변수를 인스펙터에서 설정할 수 있게 합니다. 그러나 이 애트리뷰트를 제거하면, 인스펙터에서 설정된 값이 아닌 기본값이 사용됩니다.
HideInInspector: 이 애트리뷰트를 통해 변수를 인스펙터에서 숨기지만, 인스펙터에서 설정된 값은 유지됩니다. 따라서, 인스펙터에서 설정된 값을 사용하게 됩니다.
1번에서는 SerializeField를 제거하여 기본값이 사용되었고, 2번에서는 HideInInspector를 사용하여 인스펙터에서 설정된 값이 유지된 것입니다.
1. CSV/JSON 등 데이터 저장 포맷에 대해 설명하고, 활용에 적절한 상황을 설명해주세요.
2. 특정 데이터를 JSON으로 활용하기 위해 해야하는 작업은 무엇인가요?
3. Unity에서 필드를 직렬화하려면 어떻게 해야하는지 설명해주세요.
CSV는 데이터를 쉼표로 구분하여 저장하는 단순한 파일 형식입니다.
장점:
단점:
활용에 적절한 상황:
JSON (JavaScript Object Notation)
JSON은 데이터를 키-값 쌍으로 저장하는 포맷으로, 가볍고 사람이 읽기 쉬운 텍스트 형식입니다.
장점:
계층적 데이터 구조를 쉽게 표현할 수 있습니다.
많은 프로그래밍 언어와 쉽게 통합할 수 있습니다.
데이터를 직렬화하고 네트워크를 통해 전송하기에 적합합니다.
단점:
데이터 크기가 커질 수 있습니다.
이진 데이터 표현이 비효율적일 수 있습니다.
활용에 적절한 상황:
데이터 준비:
JSON으로 변환할 데이터를 준비합니다. 이 데이터는 객체, 배열, 숫자, 문자열 등 다양한 타입이 될 수 있습니다.
직렬화 (Serialization):
전송 및 저장:
역직렬화 (Deserialization):
예: Python의 json.loads(), JavaScript의 JSON.parse(), C#의 JsonConvert.DeserializeObject().
1.Public 필드:
필드를 public으로 선언하면 Unity의 인스펙터에서 자동으로 직렬화됩니다.
public int myValue;
2.[SerializeField] 속성:
private이나 protected 필드를 직렬화하고 싶을 때 사용합니다.
[SerializeField] private int myValue;
사용자 정의 클래스를 직렬화하려면 클래스에 이 속성을 추가합니다.
[System.Serializable]
public class MyClass
{
public int myValue;
public string myString;
}
4.지원되는 데이터 타입:
5.Property 대신 필드 사용:
Unity에서 필드를 직렬화하면 인스펙터에서 해당 필드의 값을 설정하고 편집할 수 있으며, 게임 실행 중이나 저장 시 이 값들이 유지됩니다.