Unity에 빌트인된 일부 기능은 자동으로 직렬화를 사용합니다. 해당 항목은 아래와 같습니다.
자세한 내용은 스크립트 직렬화 문서를 참조하십시오.
Unity에서는 직렬화를 사용하여 씬, 에셋, 에셋 번들을 컴퓨터 하드 드라이브에 저장하거나 로드합니다. 여기에는 MonoBehaviour 컴포넌트와 ScriptableObjects 같은 사용자 지정 스크립팅 API 오브젝트에 저장된 데이터가 포함됩니다.
이는 에디터의 재생 모드와 편집 모드에서 발생합니다.
인스펙터 창에서 게임 오브젝트의 컴포넌트 필드 값을 보거나 변경할 때는 Unity가 이 데이터를 직렬화해서 인스펙터 창에 표시합니다. 인스펙터 창이 필드의 값을 표시할 때는 Unity 스크립팅 API와 통신하지 않습니다. 스크립트에서 프로퍼티를 사용하면 Unity가 인스펙터 창 필드를 직접 직렬화하기 때문에 인스펙터 창에서 값을 보거나 변경해도 프로퍼티의 게터와 세터가 호출되지 않습니다.
스크립트를 변경 및 저장할 때 Unity는 현재 로드된 스크립트 데이터를 모두 재로드합니다. 먼저 모든 로드된 스크립트에서 직렬화 가능한 변수를 저장하고, 스크립트 로드 후 복원합니다. 직렬화할 수 없는 모든 데이터는 스크립트 재로드 이후 사라집니다.
이는 모든 에디터 창과 프로젝트의 모든 MonoBehaviours에 영향을 끼칩니다. Unity의 다른 직렬화와는 달리 프라이빗 필드는 ‘SerializeField’ 속성이 없더라도 재로드할 때 기본적으로 직렬화됩니다.
직렬화에서 프리팹은 하나 이상의 게임 오브젝트 및 컴포넌트의 직렬화된 데이터입니다. 프리팹 인스턴스에는 프리팹 소스와 수정 리스트에 대한 레퍼런스가 포함되어 있습니다. 수정은 프리팹 소스에서 특정 프리팹 인스턴스를 생성하기 위해 Unity가 수행하는 작업입니다.
프리팹 인스턴스는 Unity 에디터에서 프로젝트를 편집할 때만 존재합니다. 프로젝트 빌드 과정에서 Unity 에디터는 게임 오브젝트를 두 세트의 직렬화 데이터(프리팹 소스와 프리팹 인스턴스의 수정 사항)로 부터 인스턴스화합니다.
프리팹 또는 게임 오브젝트 같이 씬에 존재하는 것에 Instantiate를 호출하면 Unity가 이 항목을 직렬화합니다. 이는 런타임 시 그리고 에디터에서 모두 발생합니다. UnityEngine.Object에서 파생된 모든 항목이 직렬화될 수 있습니다.
이후 Unity는 새 게임 오브젝트를 생성해 데이터를 새 게임 오브젝트에 역직렬화합니다. 다음으로 Unity는 다른 배리언트에서 동일한 직렬화 코드를 실행해 어떤 UnityEngine.Objects
가 레퍼런스된 것인지 보고합니다. 모든 레퍼런스된 UnityEngine.Objects
를 체크해 인스턴스화되는 데이터의 일부인지 확인합니다. 레퍼런스가 텍스처 같은 “외부” 요소를 가리키면 Unity는 해당 레퍼런스를 그대로 유지합니다. 레퍼런스가 자식 게임 오브젝트 같은 “내부” 요소를 가리키면 Unity는 해당 복사본 레퍼런스로 패치합니다.
Resource.GarbageCollectSharedAssets()
는 네이티브 Unity 가비지 컬렉터로 일반적인 C#의 가비지 컬렉터와는 기능이 다릅니다. 씬을 로드한 후 텍스처처럼 더 이상 레퍼런스되지 않는 오브젝트를 확인하고 안전하게 언로드합니다. 네이티브 Unity 가비지 컬렉터는 어떤 오브젝트가 모든 레퍼런스를 외부 UnityEngine.Objects
로 보고하는지 변형에서 시리얼라이저를 실행합니다. 이렇게 해서 한 씬에서 사용된 텍스처가 다음 씬에서 언로드됩니다.
• 2017–05–15 페이지 게시됨
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.