개발 블로그

Unity 오브젝트 생성·삭제할 때 자주 쓰는 함수들 본문

Unity

Unity 오브젝트 생성·삭제할 때 자주 쓰는 함수들

daehwan2 2026. 2. 5. 11:33

Instantiate부터 Destroy까지, 실제로 가장 많이 쓰는 것들만 정리

Unity로 게임을 만들다 보면
결국 계속 반복하게 되는 작업이 있습니다.

  • 적 생성
  • 총알 생성
  • 이펙트 생성
  • 오브젝트 삭제
  • 다시 생성

처음엔 그냥 튜토리얼 따라 치다가
어느 순간 이런 고민이 생깁니다.

“이거 계속 Instantiate / Destroy 써도 되나?”
“SetActive랑 뭐가 다른 거지?”
“왜 프레임이 갑자기 떨어지지…?”

저도 이 부분에서 꽤 많이 삽질했습니다.
그래서 이 글에서는
Unity에서 오브젝트 생성·삭제할 때 실제로 가장 많이 쓰는 함수들
실전 기준으로 정리해보려고 합니다.


1️⃣ Instantiate() – 오브젝트 생성의 시작

 
Instantiate(prefab);

Unity에서 오브젝트를 만드는 가장 기본적인 방법입니다.

보통 이렇게 씁니다.

 
Instantiate(prefab, position, rotation);

주로 사용하는 상황:

  • 적 스폰
  • 총알 발사
  • 이펙트 생성
  • UI 동적 생성

👉 프리팹 기반 생성이 기본 패턴입니다.

주의할 점

  • 너무 자주 호출하면 성능 문제 발생
  • Update에서 무분별하게 쓰면 프레임 드랍 직행

2️⃣ Destroy() – 가장 쉬운 삭제, 하지만 함정도 많음

 
Destroy(gameObject);

오브젝트를 완전히 삭제합니다.

 
Destroy(gameObject, 2f); // 2초 후 삭제

자주 쓰는 경우:

  • 이펙트 정리
  • 죽은 적 제거
  • 임시 오브젝트 제거

문제는 여기서부터입니다

Destroy는 즉시 메모리에서 사라지는 게 아닙니다.
GC(가비지 컬렉션) 타이밍에 영향을 주고,
많이 쓰면 프레임 드랍의 원인이 됩니다.

그래서 실무에서는
“무조건 Destroy”는 잘 안 씁니다.


3️⃣ SetActive() – Destroy보다 더 자주 쓰이는 함수

 
gameObject.SetActive(false); gameObject.SetActive(true);

오브젝트를 삭제하지 않고
비활성화만 합니다.

주 사용 사례:

  • 총알, 적 재사용
  • UI 열고 닫기
  • 이펙트 관리

👉 성능 관점에서는
Destroy보다 SetActive가 훨씬 안전한 선택인 경우가 많습니다.


4️⃣ Destroy vs SetActive 차이 (중요)

이건 꼭 한 번 정리하고 가야 합니다.

구분DestroySetActive
메모리 해제됨 유지됨
성능 비용 큼 비용 적음
재사용 불가 가능
사용 용도 완전 제거 임시 비활성

👉 반복 생성/삭제되는 오브젝트라면
Destroy 대신 SetActive를 먼저 고민하는 게 좋습니다.


5️⃣ 오브젝트 풀링(Object Pooling)과 연결됨

여기까지 오면
자연스럽게 이 개념으로 이어집니다.

“그럼 미리 만들어두고 켜고 끄면 되겠네?”

맞습니다.
그래서 Unity에서는 오브젝트 풀링을 많이 씁니다.

기본 흐름:

  1. 게임 시작 시 오브젝트 여러 개 생성
  2. 필요할 때 SetActive(true)
  3. 사용 끝나면 SetActive(false)

👉 Instantiate / Destroy 남용으로 인한
성능 문제를 해결하는 대표적인 패턴입니다.


6️⃣ transform으로 생성 직후 위치 조정

오브젝트 생성 후 거의 항상 같이 쓰입니다.

 
GameObject obj = Instantiate(prefab); obj.transform.position = spawnPosition;

또는 한 줄로:

 
Instantiate(prefab, spawnPosition, Quaternion.identity);

👉 생성 + 위치 지정은 거의 세트라고 봐도 됩니다.


7️⃣ 부모 지정 (SetParent)

UI나 그룹 관리할 때 자주 씁니다.

 
obj.transform.SetParent(parentTransform);

주 사용 예:

  • UI 동적 생성
  • 여러 오브젝트 묶어서 관리

정리해보면 이렇습니다

Unity에서 오브젝트 생성·삭제 관련해서
실제로 손이 가장 많이 가는 함수들은:

  • Instantiate
  • Destroy
  • SetActive
  • transform.position
  • SetParent

그리고 중요한 포인트 하나.

👉 Destroy는 최후의 수단처럼 생각하는 게 좋습니다.


마무리

처음 Unity 할 때는
Instantiate / Destroy만 알아도 게임은 돌아갑니다.

하지만
조금만 규모가 커지면
성능 이슈가 바로 드러납니다.

이 글을 보고
“아, 이건 Destroy 말고 SetActive 써야겠네”
이 정도만 느껴졌다면 충분합니다.

반응형
Comments