2D 플랫포머 게임 만들기(8)
이전에는 프리팹으로 생성한 오브젝트의 고정위치 생성 및 이동과 더불어 플레이어가 맵을 이탈하지 못하도록 경계를 설정해주는 작업을 하였습니다. 이번에는 프리팹으로 계속해서 생성되는 오브젝트를 플레이어가 먹지 않고 지나치게 되면 계속해서 쌓여 게임의 성능과 용량을 크게 차지하게 될 수 있으니 이를 방지하기 위한 작업을 하겠습니다.
오브젝트 삭제
저희가 사용하는 게임의 화면은 기본적으로 X축 -10 에서 10, Y축 -5 에서 5의 범위를 가지고 있습니다. 사실상 이 범위 바깥으로 나가면 보이지 않고, 게임에서 제외됩니다. 그렇지만, 오브젝트를 생성하고 삭제해주지 않는다면, 실제로 보이는 오브젝트는 몇개 되지 않아도 계속해서 보이지 않는 공간에 쌓여 메모리공간 및 성능의 영향을 끼칠 수 있습니다. 이러한 문제점을 방지하지 위해 이 범위를 벗어나게 된다면 자동으로 오브젝트가 없어지도록 할 것입니다. 코드는 간단합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinMovement : MonoBehaviour
{
public float speed = 3f;
private Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(-speed, 0);
}
void Update()
{
if(transform.position.x <= -10)
{
Destroy(gameObject);
}
}
}
이전에 작성했던 CoinMovement에 Update()를 추가해 if문을 넣었습니다. -10 즉, 코인이 향하는 방향의 끝 지점보다 낮은 좌표로 이동하게 되면 Destroy를 통해 해당 오브젝트를 없애주는 방식입니다.
여기서 Transform과 gameObject는 따로 지정을 해주지 않아도 자동으로 해당 스크립트가 들어가 있는 오브젝트를 가리키게 됩니다. Destroy도 마찬가지로 유니티 내부에서 제공하는 함수입니다.
플레이어가 코인을 전혀 먹지 않아도 씬에서 볼 수 있는 최대 갯수인 7개 까지만 생성되고, 6개의 Clone이 유지되는 모습을 살펴볼 수 있습니다. 해당 갯수는 생성되는 시간과 간격에 따라 달라질 수 있습니다.
<NEXT>
이번에는 간단하게 오브젝트의 갯수를 제어하여 메모리사용과 시스템 과부하를 예방하는 방법에 대해 알아보았습니다.
다음에는 장애물을 설치해 플레이어가 닿으면 죽고, 정해진 목숨을 전부 사용하면 게임오버가 되도록 설계해 보겠습니다. 감사합니다.
'게임 프로그래밍 > 게임개발 중급' 카테고리의 다른 글
게임개발 중급(15) - 2D 플랫포머 게임 만들기(10) (0) | 2023.05.05 |
---|---|
게임개발 중급(14) - 2D 플랫포머 게임 만들기(9) (2) | 2023.05.04 |
게임개발 중급(12) - 2D 플랫포머 게임 만들기(7) (2) | 2023.05.01 |
게임개발 중급(11) - 2D 플랫포머 게임 만들기(6) (0) | 2023.04.30 |
게임개발 중급(10) - 2D 플랫포머 게임 만들기(5), 프리팹(Prefab) (0) | 2023.04.29 |