Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- sparkmain(clone) 무한생성
- 최소신장트리 mst
- navisworks api
- BFS
- unity sparkmain(clone)
- 최단거리 알고리즘
- articulation body
- GetComponent
- raycast
- 디지털트윈
- Unity
- 티스토리챌린지
- unity korea
- 트리구조
- 크루스칼
- 유니티 sparkmain(clone)
- C#
- list clear
- 오블완
- 드롭다운
- sparkmain(clone)
- 너비탐색
- dropdown
- 깊이탐색
- Simulation
- 행동트리
- removeAll
- 유니티
- dfs
- readonly
Archives
- Today
- Total
낑깡의 게임 프로그래밍 도전기
Unity C# [System.Serializable] 본문
반응형
SMALL
[System.Serializable]은 C#에서 클래스를 직렬화(Serialization)할 수 있도록 해주는 속성(Attribute) 입니다.
**직렬화(Serialization)**란 데이터를 저장하거나 네트워크로 전송할 수 있도록 바이트 형태로 변환하는 과정을 의미합니다.
1. 직렬화가 필요한 이유
- 유니티에서 인스펙터(Inspector)에 표시할 수 있도록 하기 위해
- 파일(JSON, XML 등)로 저장하거나 불러오기 위해
- 네트워크로 데이터를 주고받을 때 활용하기 위해
2. 사용 예시
using UnityEngine;
[System.Serializable]
public class Item
{
public string itemName;
public int price;
}
이 클래스는 무엇을 하는가?
- Item 클래스를 직렬화 가능하게 만들어 유니티 인스펙터에서 볼 수 있도록 합니다.
- 이 클래스의 데이터를 JSON이나 파일로 쉽게 저장하고 불러올 수 있습니다.
3. 유니티 인스펙터에서 사용 예시
using UnityEngine;
public class Inventory : MonoBehaviour
{
public Item[] items; // 인스펙터에서 편집 가능
}
- Item 클래스에 [System.Serializable]을 추가했기 때문에,
Inventory 클래스의 items 배열이 유니티 인스펙터에서 보이고 수정 가능합니다.
4. JSON 직렬화 사용 예시
using UnityEngine;
public class SaveLoadExample : MonoBehaviour
{
public Item item = new Item { itemName = "포션", price = 50 };
private void Start()
{
string json = JsonUtility.ToJson(item); // JSON으로 변환
Debug.Log("저장된 JSON 데이터: " + json);
}
}
실행 결과
저장된 JSON 데이터: {"itemName":"포션","price":50}
- JsonUtility.ToJson(item)을 사용하면 Item 객체를 JSON 문자열로 변환할 수 있습니다.
5. [System.Serializable]을 안 쓰면?
public class Item
{
public string itemName;
public int price;
}
- 유니티 인스펙터에서 보이지 않습니다.
- JSON 변환이 불가능합니다. (JsonUtility.ToJson() 사용 시 에러 발생)
6. [System.Serializable] 정리
특징 | 설명 |
목적 | 객체를 JSON, 파일 저장, 네트워크 전송 등에 사용할 수 있도록 변환 |
유니티 활용 | 인스펙터에서 클래스 필드 표시 가능 |
필수 조건 | class가 public이어야 하며, 내부 필드도 public이거나 [SerializeField]이어야 보임 |
제한 사항 | MonoBehaviour에는 사용할 수 없음 |
7. [System.Serializable] vs [SerializeField] 차이점
속성 | 메일 |
[System.Serializable] | 클래스 전체를 직렬화 가능하도록 설정 |
[SerializeField] | **개별 필드(변수)**를 직렬화 가능하도록 설정 (private 변수도 인스펙터에서 보이게 함) |
예제
[System.Serializable]
public class Item
{
[SerializeField] private string itemName;
[SerializeField] private int price;
}
- Item 클래스는 직렬화 가능
- itemName, price는 private이지만 인스펙터에서 보이도록 설정
요약
- [System.Serializable]은 클래스를 직렬화 가능하도록 설정.
- 유니티 인스펙터에서 클래스 필드를 편집할 수 있도록 함.
- JSON 변환 및 데이터 저장, 네트워크 전송 등에 필수.
- MonoBehaviour에는 사용할 수 없음.
- 개별 필드는 [SerializeField]로 설정 가능.
반응형
LIST