Destroy()는 Instantiate()와 반대로 오브젝트를 삭제하는 함수다
오브젝트 뿐만아니라 오브젝트에 부착되어 있는 개별 컴포넌트도 삭제가 가능하다
Destroy(GameObject, time)
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()의 파라미터를 사용하여 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);
}
}
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