Unity2D_Basic #5

haechi·2021년 7월 25일
0

unity

목록 보기
26/39

210725
Unity2D_Basic #5


  • Destroy()
    오브젝트 삭제 함수. 매개변수에 입력되어 있는 오브젝트 혹은 컴포넌트 삭제

플레이어 공격으로 인해 사망하는 적, 플레이어와 부딪혀 아이템 획득 등 활용

DestroySample.cs

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

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

    private void Awake()
    {
        // Destroy(playerObject.GetComponent<PlayerController>()); // playerObject의 PlayerController 컴포넌트를 삭제
        Destroy(playerObject);  // playerObject 삭제
    }
}

위와 같이 오브젝트 자체를 삭제할 수 있고 오브젝트의 컴포넌트를 삭제할 수도 있다.
혹은 Destroy(GameObject, time) 으로 time 시간만큼 흐른 뒤에 삭제하는 방법도 있다.

이전에 만들었던 2dBasic 프로젝트에서 SpawnPoint 에서 오브젝트들이 계속 생성되어 화면 끝으로 이동했다.
이 오브젝트들을 일정 범위를 벗어나면 삭제되도록 해보자

PositionAutoDestroyer.cs

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);

    private void Update()
    {
        //  범위를 벗어난 경우 삭제
        if (transform.position.x < limitMin.x || transform.position.x > limitMax.x ||
            transform.position.y < limitMin.y || transform.position.y > limitMax.y)
        {
            // 본인이 소속된 게임 오브젝트
            Destroy(gameObject);
        }
    }
}

생성되는 Box, Circle, Triangle 프리팹에 컴포넌트로 추가 후 실행시키면

이와 같이 지정된 좌표를 넘어서면 오브젝트가 삭제된다.

다음으로 특정 오브젝트와 충돌 시 삭제되도록 해보자
-Wall 오브젝트 생성

-Circle prefab에 Collider 추가

-Wall 오브젝트에 적용할 소스코드 작성
Wall.cs

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;
    }
}

실행시 벽과 부딪힌 오브젝트가 삭제되고 wall의 색상이 일시적으로 빨간색으로 변한다.

참고
https://www.inflearn.com/course/%EA%B3%A0%EB%B0%95%EC%82%AC-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B8%B0%EC%B4%88/lecture/48459?tab=curriculum

profile
공부중인 것들 기록

1개의 댓글

comment-user-thumbnail
2021년 7월 25일

ㅎㅎ 요즘 매우 열심히 하시네요~ ㅎㅎㅎ 응원합니다!

답글 달기