Menu
CoddyTech

파괴하기

Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 85개 중 67번째.

Destroy(obj)는 자식 객체를 포함해 GameObject를 씬에서 제거합니다. 두 번째 인수를 전달하면 제거가 지연됩니다. Destroy(obj, 2f)는 2초 후에 객체를 제거하며, 이를 호출한 스크립트는 즉시 계속 실행됩니다. 이 대포는 Space 키를 누르면 발사되고, 생성된 각 탄환은 2초 후에 사라집니다.

public GameObject bulletPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        Destroy(bullet, 2f);
    }
}

프리팹이 아니라 복사본을 전달하세요. Destroy(bulletPrefab)은 Destroying assets is not permitted to avoid data loss.라는 메시지와 함께 거부됩니다. 그리고 객체를 뜻하는 경우에는 GameObject를 전달하세요. 스크립트 내부에서 gameObject는 스크립트가 붙어 있는 객체이므로, Destroy(gameObject)는 해당 객체를 제거하지만 Destroy(this)는 스크립트만 제거하고 객체는 그대로 남겨 둡니다.

Destroy는 즉시 실행되지 않습니다. Unity는 현재 프레임의 끝, 즉 해당 프레임의 Update()와 LateUpdate() 호출이 끝난 뒤 객체를 제거합니다. 따라서 Destroy 뒤에 있는 줄도 계속 실행되며, 프레임이 끝날 때까지 객체를 찾을 수 있습니다.

challenge icon

챌린지

중급

오래된 동전들을 치우고, 스페이스 키를 누르면 슈트가 제거되도록 하세요.

  1. 새 동전인 GameObject coin = Instantiate(...);은 유지하고, 이어서 Destroy(coin, 3f);를 호출하세요.
  2. Input.GetKeyDown(KeyCode.Space)일 때 Destroy(gameObject);를 호출하세요. Destroy(this)를 사용하면 스크립트만 제거됩니다.

‘플레이’를 누르세요. 동전은 각각 3초 후 사라지고, 스페이스 키를 누르면 새 동전이 생성되지 않습니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class CoinChute : MonoBehaviour
{
    public GameObject coinPrefab;
    public float interval = 1f;
    float timer;

    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= interval)
        {
            Instantiate(coinPrefab, transform.position, Quaternion.identity);
            timer -= interval;
        }

        // Space: 투입구를 파괴
    }
}

Unity 스크립팅 기초의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드