
이번 실습에서는 다음과 같은 기능을 구현합니다:

Ctrl + D를 눌러 물품을 복제합니다.Destroy(삭제할 오브젝트, 딜레이 시간);Destroy(gameObject, 0.5f); // 0.5초 후에 오브젝트 삭제if (!hasPackage) // 물품이 없을 때만 픽업 가능
{
hasPackage = true;
Debug.Log("물품이 픽업되었습니다.");
Destroy(other.gameObject, destroyDelay); // 물품 삭제
}other.gameObject는 플레이어가 충돌한 물품 오브젝트를 가리킵니다.destroyDelay는 오브젝트가 삭제되기까지의 지연 시간입니다.[SerializeField] float destroyDelay = 0.5f;destroyDelay 변수를 인스펙터에서 조정할 수 있도록 합니다.0.5f로 설정합니다.if (other.tag == "Package")
{
if (!hasPackage) // 물품이 없을 때만 픽업 가능
{
hasPackage = true;
Debug.Log("물품이 픽업되었습니다.");
Destroy(other.gameObject, destroyDelay); // 물품 삭제
}
else
{
Debug.Log("이미 물품을 가지고 있습니다.");
}
}!hasPackage는 hasPackage == false와 동일한 의미로, 플레이어가 물품을 가지고 있지 않을 때를 의미합니다.hasPackage 변수를 false로 변경하여 새로운 물품을 픽업할 수 있게 합니다.아래는 위의 내용을 모두 반영한 전체 코드를 제공합니다.
using UnityEngine;
public class Delivery : MonoBehaviour
{
[SerializeField] float destroyDelay = 0.5f; // 물품 삭제 딜레이 시간
bool hasPackage = false; // 게임 시작 시 물품이 없음
void Start()
{
Debug.Log("초기 hasPackage 값: " + hasPackage);
}
void OnTriggerEnter2D(Collider2D other)
{
// 물품과 충돌했을 때
if (other.tag == "Package")
{
if (!hasPackage) // 물품이 없을 때만 픽업 가능
{
hasPackage = true;
Debug.Log("물품이 픽업되었습니다.");
Destroy(other.gameObject, destroyDelay); // 물품 삭제
}
else
{
Debug.Log("이미 물품을 가지고 있습니다.");
}
}
// 고객과 충돌했을 때
else if (other.tag == "Customer")
{
if (hasPackage)
{
hasPackage = false;
Debug.Log("물품이 배달되었습니다.");
}
else
{
Debug.Log("물품이 없습니다. 배달할 수 없습니다.");
}
}
}
}
Destroy() 함수는 지정된 오브젝트를 게임에서 삭제합니다.destroyDelay는 삭제되기까지의 지연 시간을 나타냅니다.Destroy(other.gameObject, 0.5f);는 0.5초 후에 오브젝트를 삭제합니다.[SerializeField] 어트리뷰트를 사용하면 private 변수도 인스펙터에서 조정할 수 있습니다.destroyDelay 값을 0.5초에서 1초로 변경하여 물품이 사라지는 시간을 조절할 수 있습니다.if (!hasPackage) 조건문을 사용하여 이 로직을 구현합니다.Debug.Log() 함수를 사용하여 게임의 진행 상황을 콘솔에 출력합니다.Delivery 스크립트를 플레이어 오브젝트에 추가합니다.Debug.Log()를 통해 게임의 진행 상황을 추적하고 디버깅에 활용했습니다.이렇게 해서 물품을 픽업하고 배달하는 기본적인 기능을 구현했습니다. 이 기능을 바탕으로 게임을 더욱 발전시킬 수 있을 것입니다.