UnityEngine.Object 클래스는 Unity가 Unity 에디터에서 참조할 수 있는 모든 오브젝트의 기본 클래스입니다. UnityEngine.Object에서 상속하는 클래스를 인스펙터의 필드에 끌어서 놓거나 오브젝트 필드 옆의 오브젝트 피커를 사용하여 선택할 수 있습니다.
커스텀 클래스의 Object에서 직접 상속하는 것보다는 목표에 맞게 설계된 클래스에서 상속하는 것이 좋습니다. 예시:
GameObject에 추가할 수 있는 커스텀 컴포넌트를 작성하거나, GameObject가 수행하는 작업을 제어하거나, 일부 관련 기능을 제공하려면 MonoBehaviour에서 상속합니다.ScriptableObject에서 상속합니다.둘 다 UnityEngine.Object에서 상속되지만 이러한 목적에 적합한 추가 기능을 제공합니다.
참고: 이름이 충돌하지 않도록 UnityEngine.Object는 기본 스크립트 템플릿에 포함되지 않는 .NET의 기본 System.Object와 같지 않습니다. 인스펙터에서 할당할 필요가 없는 클래스를 만들려는 경우 여전히 .NET의 System.Object에서 상속할 수 있습니다.
Object 클래스는 오브젝트를 인스턴스화하고 제거하고 특정 유형의 오브젝트에 대한 레퍼런스를 찾기 위한 메서드를 제공합니다. Object 클래스의 API에 대한 자세한 내용은 오브젝트의 스크립트 레퍼런스 페이지를 참조하십시오.
UnityEngine.Object는 관리되지 않는(C++) 대응 오브젝트에 연결되어 있기 때문에 Unity의 특수한 C# 오브젝트 유형입니다. 예를 들어 Camera 컴포넌트를 사용하는 경우 Unity는 C# 오브젝트 자체가 아니라 C++로 구현된 대응 오브젝트에 오브젝트의 상태를 저장합니다.
Unity는 현재 C# WeakReference 클래스를 UnityEngine.Object 인스턴스와 함께 사용할 수 없습니다. 따라서 로드된 에셋을 참조하기 위해 WeakReference를 사용해서는 안 됩니다. WeakReference 클래스에 대한 자세한 내용은 Microsoft의 WeakReference 기술 자료를 참조하십시오.
UnityEngine.Object에서 파생된 오브젝트를 제거하기 위해 Object.Destroy 또는 Object.DestroyImmediate 같은 메서드를 사용하는 경우 Unity는 C++ 대응 오브젝트를 제거(언로드)합니다. 가비지 컬렉터가 메모리를 관리하므로 명시적인 호출로 C# 오브젝트를 제거할 수 없습니다. 관리되는 오브젝트에 대한 레퍼런스가 더 이상 없으면 가비지 컬렉터가 이를 수집하고 제거합니다.
애플리케이션이 삭제된 UnityEngine.Object에 다시 액세스하려고 하면 Unity는 대부분의 유형에 대한 네이티브 대응 오브젝트를 다시 생성합니다. 이 재생성 동작에는 MonoBehaviour 및 ScriptableObject라는 두 가지 예외가 있습니다. Unity는 이러한 오브젝트가 제거된 후에는 다시 로드하지 않습니다.
MonoBehaviour 및 ScriptableObject는 같음(==) 및 같지 않음(!=) 연산자를 오버라이드합니다. 제거된 MonoBehaviour 또는 ScriptableObject를 null과 비교하면 관리되는 오브젝트가 여전히 존재하고 가비지 수집이 아직 이루어지지 않은 경우 연산자는 true를 반환합니다.
?? 및 ?. 연산자를 오버로드할 수 없으므로 UnityEngine.Object에서 파생된 오브젝트와 호환되지 않습니다. 관리되는 오브젝트가 여전히 존재하는 동안 제거된 MonoBehaviour 또는 ScriptableObject에서 사용하는 경우 같음 및 같지 않음 연산자와 동일한 결과를 반환하지 않습니다.