210725
Unity2D_Basic #5
플레이어 공격으로 인해 사망하는 적, 플레이어와 부딪혀 아이템 획득 등 활용
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의 색상이 일시적으로 빨간색으로 변한다.
ㅎㅎ 요즘 매우 열심히 하시네요~ ㅎㅎㅎ 응원합니다!