본문 바로가기
C#

[C#][Unity] 2D 아이템 시간경과시 자동삭제

by teamnova 2022. 12. 13.

안녕하세요 

오늘은 시간경과시 드롭된 아이템이 삭제되는 예제를 진행하겠습니다.

더보기

기존 예제인 '2D 아이템 자동습득' 에서 이어지는 예제입니다.

https://stickode.tistory.com/613

 

먼저 드롭되는 아이템 오브젝트 PickUpItem 스크립트를 열어주세요.

 

아래의 코드를 추가하면 됩니다.

ttl변수에 설정한 시간이 경과되면 오브젝트를 삭제하는 코드입니다.

//PickUpItem.cs

[SerializeField] float ttl = 10f; //시간 경과

void Update(){
	ttl -= Time.deltaTime;
    if(ttl <0){//아이템 미습득 상태로 ttl만큼 경과시 아이템삭제
    	Destroy(gameObject);
    }
}

 

전체 코드입니다.

//PickUpItem.cs

public class PickUpItem : MonoBehaviour
{   
    Transform player;
    [SerializeField] float speed = 5f; //플레이어가 습득시 플레이어로 날라오는 속도
    [SerializeField] float pickUpDistance = 1.5f; //아이템습득범위
    [SerializeField] float ttl = 10f; //시간 경과
    private void Awake(){
        player = GameManager.instance.player.transform;
    }
    void Update()
    {   
        ttl -= Time.deltaTime;
        if(ttl <0){//아이템 미습득 상태로 ttl만큼 경과시 아이템삭제
            Destroy(gameObject);
        }
        
        float distance = Vector3.Distance(transform.position, player.position); 
        //transform.position 은 아이템의 위치, player.position은 플레이어 위치
        //Vector3.Distance(a,b) => a와 b 사이의 거리 반환

        if(distance > pickUpDistance){//아이템 습득 범위보다 멀리 캐릭터가 있는경우 
            return;
        }

        transform.position = Vector3.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
        //아이템 위치를 플레이어로 이동 , 속력(3번째 매개변수)
        //time.deltaTime => 컴퓨터 성능이 제각기 다르므로 (1초에 어떤 컴은 20프레임 어떤컴은 10프레임) 이를 동일하게 하는 함수
    
        if(distance < 0.1f){ //물체가 캐릭터로 이동하면서 거리가 일정 미만되면 습득으로 간주하고 아이템삭제
            Destroy(gameObject);
        }
    }
}

 

영상에는 빠른 시연을 위해 ttl 시간을 적게 잡았습니다.