SerializeField / SerializeReference
Unity 의 Field 항목를 직렬화 할때는 SerializeField를 사용한다.
직렬화 가능한 항목은 다음과 같다.
< 직렬화 가능한 항목 >
UnityEngine.Object를 상속하는 클래스 ( GameObject, Compoent, MonoBehaviour, Texture 2D, AnimationClip 등등) |
int, string, float, bool 같은 기본 원시 데이터 유형 |
Vector2, Vector3, Vector4, Quaternion,Matrix4x4, Color, Rect, LayerMask 등 기본 제공 유형 |
Enum, Struct |
직렬화 가능한 배열, 목록, System.Serialize가 명시된 Class |
Unity 2019.3 에서 추가된 직렬화 개선 사항으로
C# 클래스 값 유형이 아닌 레퍼런스를 기반으로 직렬화를 지원해서 사용이 가능하다.
이것이 SerializeReference이다.
반응형
< SerializeReference >
SerializeReference 예시 코드는 다음과 같다.
using System;
using System.Collections.Generic;
using UnityEngine;
public interface IShape {}
[Serializable]
public class Cube : IShape
{
public Vector3 size;
}
[ExecuteInEditMode]
public class BuildingBlocks : MonoBehaviour
{
[SerializeReference]
public List<IShape> inventory;
void OnEnable()
{
if (inventory == null)
{
inventory = new List<IShape>()
{
new Cube() {size = new Vector3(1.0f, 1.0f, 1.0f)}
};
Debug.Log("Created list");
}
else
Debug.Log("Read list");
}
}
using System;
using UnityEngine;
public class SerializeReferencePolymorphismExample : MonoBehaviour
{
[Serializable]
public class Base
{
public int m_Data = 1;
}
[Serializable]
public class Apple : Base
{
public string m_Description = "Ripe";
}
[Serializable]
public class Orange : Base
{
public bool m_IsRound = true;
}
// Use SerializeReference if this field needs to hold both
// Apples and Oranges. Otherwise only m_Data from Base object would be serialized
[SerializeReference]
public Base m_Item = new Apple();
[SerializeReference]
public Base m_Item2 = new Orange();
// Use by-value instead of SerializeReference, because
// no polymorphism and no other field needs to share this object
public Apple m_MyApple = new Apple();
}
Unity SerializeReference : [링크]
Unity SerailizeField : [링크]
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity)문제해결)ArgumentException: You can only call GUI functions from inside OnGUI. (0) | 2022.09.01 |
---|---|
Unity) Network Connection Check(인터넷 연결 확인 / Wi-fi 연결 ) (0) | 2022.08.31 |
Unity) Preset Manager (기본 값 설정 : 프리셋) (4) | 2022.08.24 |
Unity) ScriptableObject Sington (instance) (0) | 2022.08.24 |
Unity) Insepctor Custom (조건 처리 / 숨기기 / 비활성화) (1) | 2022.08.22 |
댓글