[Unity] Destroy()

남이섬·2023년 3월 13일
0

Destroy()는 Instantiate()와 반대로 오브젝트를 삭제하는 함수다
오브젝트 뿐만아니라 오브젝트에 부착되어 있는 개별 컴포넌트도 삭제가 가능하다

Destroy(GameObject, time)

Object 삭제

Hierarchy의 Object에 직접 적용

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

public class DestroySample : MonoBehaviour
{
    [SerializeField]
    private GameObject playerObject;

    private void Awake()
    {
        // playerObject 게임오브젝트의 "PlayerController" 컴포넌트 삭제
        Destroy(playerObject.GetComponent<PlayerController>());
    }
}

Destroy() 매개변수 사용

Destroy() 파라미터로 바로 적용하여 오브젝트 삭제

Destroy()의 파라미터를 사용하여 Hierarchy에 있는 Object자체 삭제

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

public class DestroySample : MonoBehaviour
{
    [SerializeField]
    private GameObject playerObject;

    private void Awake()
    {
        // playerObject 게임오브젝트를 삭제
        Destroy(playerObject);
    }
}

Destroy() 두번째 매개변수를 활용하여 등록된 시간 후에 삭제

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

public class DestroySample : MonoBehaviour
{
    [SerializeField]
    private GameObject playerObject;

    private void Awake()
    {
        // playerObject 게임오브젝트를 2초 뒤에 삭제
        Destroy(playerObject, 2.0f);
    }
}

특정 위치를 벗어 났을때 삭제

Vector2를 활용하여 min, max 범위를 지정하고,
조건문을 활용하여 범위를 벗어난다면 삭제하게 만든다

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

public class positionAutoDestroyer : MonoBehaviour
{
    private Vector2 limitMin = new Vector2(-7.5f, -4.5f);
    private Vector2 limitMax = new Vector2(7.5f, 4.5f);

    // Update is called once per frame
    private void Update()
    {
        // 이 스크립트를 가지고 있는 개임오브젝트의 x,y 좌표가 범위 밖으로 벗어나면 오브젝트 삭제
        if (transform.position.x < limitMin.x || transform.position.x > limitMax.x || transform.position.y < limitMin.y || transform.position.y > limitMax.y)
        {
            // 소문자 gameObject는 본인이 소속된 게임 오브젝트
            Destroy(gameObject);
        } 
    }
}

특정 오브젝트 충돌시 삭제

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

public class Wall : MonoBehaviour
{
    private SpriteRenderer spriteRenderer;

    private void Awake()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 벽에 부딪힌 오브젝트 삭제
        Destroy(collision.gameObject);
        // 충돌이 일어나면 벽의 색상이 잠깐 변한다
        StartCoroutine("HitAnimation");
    }

    private IEnumerator HitAnimation()
    {
        spriteRenderer.color = Color.red;
        yield return new WaitForSeconds(0.1f);
        spriteRenderer.color = Color.white;
    }
}

OnTriggerEnter2D(Collider2D collision)
StartCoroutine
IEnumerator

profile
즐겁게 살자

0개의 댓글