아래와 같이 코드를 작성하고 오브젝트에 작성한 스크립트 컴포넌트를 추가했습니다.
public class SomeClass : MonoBehaviour
{
[SerializeField] private int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 선언된 [SerializeField]를 제거했습니다.
private int intValue = 2;
이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
내 답:
[SerializeField]는 Unity 인스펙터 창에서 비공개 필드의 값을 수정할 수 있게 해주는 속성입니다. 이 속성을 제거하면 더 이상 인스펙터 창에서는 필드를 수정할 수 없고, 원래 스크립트의 값인 2가 출력되게 됩니다.
모범 답:
이번에는 아래와 같이 코드를 작성하고 오브젝트에 작성한 스크립트 컴포넌트를 추가했습니다.
public class SomeClass : MonoBehaviour
{
public int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 [HideInInspector]를 추가했습니다.
[HideInInspector] public int intValue = 2;
이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
내 답:
[HideInInspector]는 Unity에서 해당 필드를 표시하지 않도록 하는 속성입니다. 이 때, public으로 기존에 변경했던 값인 3은 그대로 적용되어 3이 출력됩니다.
모범 답:
내 답:
1번은 Unity에서 직렬화를 못하도록 막았고, 2번은 직렬화가 가능하게 하되 보이지만 않게 했기 때문입니다.
모범 답:
내 답:
CSV
• CSV는 각 데이터 필드가 쉼표로 구분되는 텍스트 파일 포맷입니다.
• 주로 표 형식의 데이터를 저장하고, 스프레드시트나 데이터베이스 소프트웨어 간에 데이터를 교환할 때 사용됩니다.
• 활용 상황: 간단한 표 형식의 데이터를 저장하고, 다양한 프로그램에서 쉽게 읽고 쓸 수 있어야 할 때 적합합니다. 예를 들어, 주소록, 간단한 재고 목록 등이 있습니다.
JSON
• JSON은 속성-값 쌍(또는 "키-값 쌍")으로 구성된 데이터 객체를 텍스트로 표현하는 경량의 데이터 교환 포맷입니다.
• JSON은 사람이 읽고 쓰기 쉽고, 기계가 파싱하고 생성하기 쉬운 구조를 가지고 있습니다.
• 활용 상황: 웹 애플리케이션과 서버 간의 데이터 교환, 모바일 애플리케이션의 설정 파일, 복잡한 데이터 구조를 가진 데이터의 저장 및 전송에 적합합니다. 예를 들어, 사용자 프로필, 설정, 게임 데이터 등이 있습니다.
모범 답:
내 답:
1. 데이터 구조 정의: JSON으로 변환하고자 하는 데이터의 구조를 정의합니다. 이는 클래스나 구조체로 표현될 수 있습니다.
2. 직렬화: 데이터 객체를 JSON 문자열로 변환하는 과정입니다. 다양한 프로그래밍 언어에서는 이를 위한 라이브러리를 제공합니다. 예를 들어, C#에서는 JsonConvert.SerializeObject() 메소드를 사용할 수 있습니다.
3. 역직렬화: JSON 문자열을 다시 데이터 객체로 변환하는 과정입니다. 이를 통해 JSON 데이터를 읽고 해당 데이터를 애플리케이션에서 사용할 수 있습니다.
모범 답:
내 답:
1. [SerializeField] 속성 사용: 비공개 필드(private)임에도 불구하고, Unity 인스펙터에서 보이게 하고 싶을 때 사용합니다.
2. 공개 필드(public) 사용: 기본적으로, Unity는 모든 공개 필드를 직렬화하고 인스펙터에 표시합니다.
3. 직렬화 가능한 클래스 사용: System.Serializable 속성을 클래스에 추가하여, 해당 클래스의 인스턴스를 Unity 인스펙터에서 직렬화할 수 있게 합니다.
모범 답:
Item 코드와 Sprite를 Key와 Value로 가지는 Dictionary를 선언하고, 이를 Unity 인스펙터에서 다뤄봅시다.
Dictionary와 ISerializationCallbackReceiver
인터페이스를 상속받은 ItemSprite
클래스를 완성하여, 인스펙터에서 지정한 Key와 Sprite가 Dictionary에 반영되도록 코드를 완성해주세요.
using System;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class ItemSprite : Dictionary<int, Sprite>, ISerializationCallbackReceiver
{
[Serializable]
public class KeyValue
{
public int Key;
public Sprite Value;
public KeyValue(int key, Sprite value)
{
Key = key;
Value = value;
}
}
[SerializeField]
private List<KeyValue> KeyValueList = new List<KeyValue>();
public void OnBeforeSerialize()
{
// TODO : Dictionary의 내용을 List로 복사하여 직렬화
}
public void OnAfterDeserialize()
{
// TODO : 역직렬화된 List의 내용을 Dictionary로 복사
}
}
확인코드
using UnityEngine;
public class ItemSpriteContainer : MonoBehaviour
{
public ItemSprite itemSprite = new ItemSprite();
}