글 작성자: Doublsb

Destroy로 해당 오브젝트의 Child를 모두 삭제하고 싶을 때, for를 사용할 경우 보통 다음과 같은 코드를 짜게 될 것이다.

for (int i = 0; i < transform.childCount; i++)
{
    Destroy(transform.GetChild(i).gameObject);
}

이후, ChildCount를 출력하면 어떻게 될까?

for (int i = 0; i < transform.childCount; i++)
{
    Destroy(transform.GetChild(i).gameObject);
}

print(transform.childCount);

그렇다. 0이 아니다. 처음에 이걸 알고 난 이후에 영문도 모른 채 자기자신을 공격했다.

왜 이런 일이 일어났을까?

 

Destroy를 호출해도 오브젝트는 바로 파괴되지 않기 때문이다. (유니티 메뉴얼 : 이벤트 함수의 실행 순서)

 

프레임 업데이트 후 OnDestroy가 호출된다. 그러니까 ChildCount를 제대로 참조하려면 1 프레임을 기다려야 한다.

혹은 아래와 같이, transform.DetachChildren을 호출해서 ChildCount를 0으로 만드는 방법도 있다.

for (int i = 0; i < transform.childCount; i++)
{
    Destroy(transform.GetChild(i).gameObject);
}

transform.DetachChildren();
print(transform.childCount);

 

반응형