본문 바로가기
개발/기본) 기본기

기본기)Unity) Fake Null

by 테샤르 2021. 10. 19.

Unity Fake Null

 

유니티 오브젝트는 C++로 작성된 네이티브 객체의 래퍼이다.

 

Unity 객체는 씬이 변경되거나 Object.Destroy()를 사용하면 제거되지만 그 객체를 C#으로 래핑 한 유니티 오브젝트는 가비지 컬렉터가 수집을 완료할 때까지 남아있게 된다. 실상으로는 모두 다 파괴가 된 상태가 아니라는 이야기이다.

반응형

Unity에서는 이 상태를 “Fake Null”이라고 하고 있습니다. 

테스트 케이스인 코드를 확인하게되면 다음과 같다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    IEnumerator Start()
    {
        BoxCollider col = gameObject.AddComponent<BoxCollider>();
        yield return null;

        Destroy(col);
        yield return null;

        CheckUnityObjectNull(col);
        CheckSystemObjectNull(col);
    }

    void CheckUnityObjectNull(Object obj)
    {
        if (obj == null)
        {
            Debug.Log("Unity Object is null");
        }
        else
        {
            Debug.Log("Unity Object is not null");
        }
    }

    void CheckSystemObjectNull(object obj)
    {
        if (obj == null)
        {
            Debug.Log("System Object is null");
        }
        else
        {
            Debug.Log("System Object is not null");
        }
    }
}

Log를 찍어서 보게되면 다음과 같다.

Destroy를 통해서 객체를 제거하는 과정에서 Object라고 하는 래핑 객체는 삭제가 되지만

내부의 닷넷의 오브젝트는 null이 아니다.

 

 

그래서 실질적으로 완벽하게 null으로 처리를 하기 위해서는 

null으로 변경 이후에 Destory를 처리하게 되면 System object도 null 처리가 된다.

ReferenceEquals와 null과 비교를 통해서 가능하다.

object.ReferenceEquals(obj, null)

 

 

Unity의 Null 검사 : [링크]

 

Null Check and Equality in Unity

In some programming languages – like C# – it is a common practice to use comparison operators and functions to check for null references. However, when programming in Unity, there are s…

sometimesicode.wordpress.com

 

 Unity's Scripting Duality and Object Destruction : [링크]

 

Unity’s Scripting Duality and Object Destruction

The Unity engine provides users with tools and abstractions that ease its usage and hide its complexity. Although we often take these commodities for granted and completely forget they exist, we of…

sometimesicode.wordpress.com

 

유니티 오브젝트의 null 비교 시 유의사항  : [링크]

 

유니티 오브젝트의 null 비교 시 유의사항

다음글: 유니티 오브젝트의 null 비교 시 유의사항 2

overworks.github.io

 

★☆☆☆☆

 

반응형

댓글