관리 메뉴

도드넷

유니티 destroy 게임 오브젝트 삭제 vs SetActive(false) 오브젝트 풀링. 본문

창고/게임 개발 [Hidden]

유니티 destroy 게임 오브젝트 삭제 vs SetActive(false) 오브젝트 풀링.

도드! 2022. 7. 4. 19:30

 

유니티 destroy vs 유니티 SetActive(false).

유니티 게임 오브젝트를 제거 삭제할때 어떻게 해야할까?

 

1. 만약 게임 오브젝트가 재사용 되지 않는다면 삭제해야한다.

Destroy(gameObject);

 

2. 만약 게임 오브젝트가 재사용되면 삭제하지 않고 비활성화 시킨다.

gameObject.SetActive(false);

 

가장 좋은예로 투사체(총알), 특수 효과(FX)는 매우 자주 계속 반복되서 사용되므로

미리 만들어놓고 List에 넣어서 ON/OFF를 반복하며 꺼내쓰는 기법인 오브젝트 풀링을 사용하면 좋다.

왜냐하면 게임 오브젝트를 생성(Instantiate)하고 삭제(Destroy)하는 작업은 약간 고사양이며

잦은 생성과 삭제로 GC가 불려 프레임 감소를 일으킬 수 있기 때문이다.

 

반면 사용수가 적고 한번 사용후 게임 플레이와 전혀 관계 없어지는 물체.

좋은 예로 플레이어에게 사망한 적 유닛, 사용하지 않아서 꺼버린 장식물등이 있다.

이런것들은 되도록 [파괴] Destroy(게임 오브젝트); 를 써서 아예 씬에서 삭제해주면 씬에 오랫동안 머문다고 가정했을때의 퍼포먼스를 향상시키고 메모리 RAM 쪽에 부담을 줄여줄 수 있다.

단, 주의해야할 점은 Destroy 할시 레퍼런스들이 null이 되므로 != null 조건문을 꼼꼼하게 많이 써줘야한다.

 

 

 

 

반응형
Comments