유니티 2D 아이템 루팅 만들어 보기 Item Looting

2023. 3. 24. 19:01유니티실습

반응형

아이템 루팅(Item looting)은 게임에서 다른 플레이어, 몬스터, 상자, 지형 등에서 아이템을 수집하는 것을 의미하며

아래의 예제는 아래의 예제는 Player가 Coin의 일정 거리에 접근하게 되면 Player에게 끌려가는 심플한 예제입니다.

 

결과화면

캐릭터가 동전에 어느 정도 가까워지면 캐릭터로 향해 자석처럼 끌려가는 것을 확인할 수 있습니다.

 

Magnet 스크립트

public class Magnet : MonoBehaviour {
    public float moveSpeed = 10f;    // 아이템의 이동 속도
    public float magnetDistance = 15f;    // 자석 작용 거리

    private Transform player;    // 플레이어의 위치를 저장하는 변수

    void Start() {
        // 플레이어 오브젝트를 찾아서 저장
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    void Update() {
        
        // 아이템과 플레이어 사이의 거리 계산
        float distance = Vector3.Distance(transform.position, player.position);

        // 거리가 magnetDistance 이내일 경우 아이템을 플레이어 쪽으로 이동
        if (distance <= magnetDistance) {
            transform.position = Vector3.MoveTowards(transform.position, player.position, moveSpeed * Time.deltaTime);
        }
    }
}

 

magnet 스크립트에선 Player Trasnfrom을 찾아서 저장하고

player = GameObject.FindGameObjectWithTag("Player").transform;

 

Player와 Coin의 거리를 계산합니다.

Vector3.Distance(transform.position, player.position);

 

계산된 거리가 자석이 작용하는 거리보다 작다면 Coin은 Player를 향해 이동합니다.

public float magnetDistance = 15f;    // 자석 작용 거리

 

if (distance <= magnetDistance) {
   transform.position = Vector3.MoveTowards(transform.position, player.position, moveSpeed * Time.deltaTime);
}

 

 

위의 자석 시스템 방식은 Physics2D, Collider2D 등 다양한 함수를 사용해도 구현이 가능하며

여러 가지 방식에 응용되어 사용되고 있습니다.

 

위의 예제는 아주 간단한 스크립트 예제로 예외적인 부분은

전혀 처리가 되지 않아서 많은 부분을 고려하고 추가해야 합니다.

 

몇 가지 예를 들면 위의 스크립트 예제는 플레이어가 코인의 속도보다 월등히 빨라서 일정 범위를 벗어나게 되면 코인은 플레이어를 쫓아오다 멈추게 되는데, 이렇게 되면 한번 자석이 발동되면 끝까지 쫓아오게 수정을 고려하시면 됩니다.

 

또 한 가지는 위의 결과 화면을 보시면 동전이 2~3회 정도 바닥에 튕기고 있지만, 플레이어가 접근하면 팅기는 도중에 플레이어를 향하게 되는 상황이 발생합니다. 이런 부분은 팅기는 동작을 마친 후에 자석이 시작되도록 내용을 추가하시면 됩니다.

 

이렇게 예제를 통하여 방향을 잡으시고 예제에서 부족한 부분을 추가, 개선하여 자신만의 소스를 만드시길 바랍니다.

감사합니다.

 

반응형