728x90
안녕하세요
오늘은 시간경과시 드롭된 아이템이 삭제되는 예제를 진행하겠습니다.
더보기
기존 예제인 '2D 아이템 자동습득' 에서 이어지는 예제입니다.
먼저 드롭되는 아이템 오브젝트 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 시간을 적게 잡았습니다.
'C#' 카테고리의 다른 글
[C#][Unity] 열거형(Enum) (0) | 2022.12.16 |
---|---|
[C#][Unity 2D] npc와 대화 시스템 구현 (0) | 2022.12.15 |
[C#][Unity] 배열(Array) : 다중 배열 : 가변 배열 (0) | 2022.12.01 |
[C#][Unity] 2D 아이템 자동습득 (0) | 2022.11.28 |
[C#][Unity] SetActive와 enabled (0) | 2022.11.16 |