반응형
private와 같은 비공개 변수를 인스펙터에서 보고 싶을 때, [SerializeField] 속성을 사용한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerializableTest : MonoBehaviour
{
[SerializeField]
private int a;
}
private으로 선언했는데도 변수 a가 보이는 것을 알 수 있다.
이제 Vector3 배열을 public으로 선언해보자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerializableTest : MonoBehaviour
{
public Vector3[] v3;
}
스크립트를 적당한 오브젝트에 추가하면 아래와 같이 스크립트가 추가된다.
V3 옆에 배열의 길이를 지정하면 Element가 생겨서 값을 정할 수 있다.
이제 임의로 만든 Struct를 배열로 선언해보자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerializableTest : MonoBehaviour
{
public struct MyStruct
{
public Vector2 v2;
public Vector3 v3;
public Material mat;
}
public MyStruct[] ms;
public Vector3[] v3;
}
스크립트에 변화가 없다.
using System; 을 선언한 후 해당 struct에 직렬화 [Serializable]를 추가한다.
using System; /* import for Serializable */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerializableTest : MonoBehaviour
{
[Serializable] /* 직렬화 */
public struct MyStruct
{
public Vector2 v2;
public Vector3 v3;
public Material mat;
}
...
인스펙터에서 구조체의 필드 Ms가 추가된 것을 알 수 있다.
그리고 배열의 길이를 설정하면 struct의 멤버 변수를 설정할 수 있다.
직렬화는 메모리 내부의 오브젝트를 내보내기 위해서 변환하는 것이다.
유니티에서는 객체를 유니티 Editor가 저장하고 재구성할 수 있도록 변환하는 프로세스이다.
직렬화를 위해서는 아래의 규칙이 필요하다.
- public이거나 SerializeField 속성이 있어야 함.
- static, const, readonly가 아님.
- 직렬화할 수 있는 filedtype (단순 필드 타입)이 있어야 한다.
직렬화에 대한 Unity Documentation 링크 참고
Unity Plus:
Unity Pro:
Unity 프리미엄 학습:
반응형
'개발 > Unity' 카테고리의 다른 글
유니티 - 변수 변경시 이벤트 발생 (Simple Event Handler) (0) | 2022.03.18 |
---|---|
유니티 Attribute - Requirecomponent로 Component 강제 설정하기 (0) | 2022.03.17 |
유니티 - 롱 클릭 progress bar 처리하기 (0) | 2022.03.15 |
유니티 - 롱 클릭 구현하기 (Unity Long Click) (0) | 2022.03.15 |
유니티 UI - 간단한 토스트 메시지 만들기 (Toast Message) (0) | 2022.03.14 |
댓글