Unity/Unity Study

[Unity] 쿠키런 모작 팀 프로젝트 중, Item 2 - 기본 아이템 구현 (완성)

Jee-U 2025. 2. 27. 19:58

 

1편에서 이어지는 글

그리하여 작성한 코드는 아래와 같다.

 

아이템, Item

public class Item : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        Cookie cookie = collision.GetComponent<Cookie>();
        if (cookie != null)
        {
            ApplyEffect(cookie);
            Destroy(gameObject);
        }
    }

    public virtual void ApplyEffect(Cookie cookie)
    {
    }
}

아이템 클래스는 모든 아이템 공통적으로 적용될 부분만 작성해주었다.

 

그리고 쿠키런의 아이템은 많고 많지만 필수로 구현하고자 생각햇던 것은 

부스터, 젤리(코인, 점수획득), 회복 포션 총 3가지이다.

 

아이템 하위의 클래스명은 각각 아이템 이름을 따라가기로 하여 score를 jelly로, heal을 potion으로 변경하여 사용하였다.

또한 jelly와 potion의 경우 아이템의 종류에 따라 값을 다르게 해주기 위해 SerializeFiled를 사용해주었다.

예시, 젤리는 2점이 오르게 해주었다.

 

 

 

코인

젤리/코인, Jelly/Coin

public class Jelly : Item
{
    [SerializeField] private int addScore;

    public override void ApplyEffect(Cookie cookie)
    {
        base.ApplyEffect(cookie);
        GameManager.Instance.AddScore(addScore);
    }
}

젤리/코인은 점수 추가기능만 부여해주고자 하기 때문에 간단하다

인스펙터 창에서 입력한 값을 충돌할때마다 점수에 추가해주게끔 해주었다.

스코어 부분은 GameManager 부분에 있으며 이부분은 UI 담당분께서 해주실 예정이었으나 간단하게 한줄만 추가하여 테스트를 진행하였다.

public class GameManager : Singleton<GameManager>
{
    public int totalScore;
    
    public void AddScore(int score)
    {
        totalScore += score;
    }
}

- 게임매니저에 추가한 스코어부분

 

 

 

포션

포션, Potion

public class Potion : Item
{
    [SerializeField] private int heal;

    public override void ApplyEffect(Cookie cookie)
    {
        base.ApplyEffect(cookie);
        cookie.Heal(heal);
    }
}

포션도 간단하다. 포션을 먹으면 쿠키(플레이어)의 체력의 값이 충전되어야 하며 그 값은 SerializeFiled에 입력해 준 값으로 충전되게 해주었다.

Heal 부분은 쿠키(플레이어)부분에 작성되어있으며 쿠키 담당 팀원분께서 빠르게 작성해주신 덕에 테스트 및 구현을 빠르게 완성할 수 있었다.

 

 

 

부스터

부스터, Booster

public class Booster : Item
{
    public override void ApplyEffect(Cookie cookie)
    {
        base.ApplyEffect(cookie);
        cookie.RunBoost(3f, 10f);
    }
}

다를거 없다, 부스터도 동일하다.

부스터는 무적이 적용되는 시간과 빨라질 스피드를 정해주어야 했는데 각각 3초, 10초로 지정해주었다.

부스터 부분은 쿠키(플레이어)에 RunBoost(float t, float runSpeed)로 하여 쿠키 담당자분께서 작성해주신게 있었는데

t는 타격 시 일시 무적이 되는 매서드에서 무적 시간을 조정하는 데 사용된 매개변수이며, runSpeed는 다른곳에서 스피드의 매개변수로 받아왔다.

 

 

오버라이드를 사용하였기 때문에 다른 하위 아이템들은 상위 아이템 클래스에서 받아오기 때문에 생각보다 코드가 간단하고 편리했다. 이로인해 오버라이드는 다른곳에서도 잘 이용할듯 하다!

 

 

 

 

 

처음 아이템을 구현하고자 할땐 너무 막막하기만 한 과정이었는데 오버라이드를 공부하고, 작성하고 보니 생각보다 쉬웠다! 플레이어에 여러 기능을 이미 구현해주신 팀원분 덕도 있다.... 이게 제일 크다.

다른 아이템도 구현 가능한지와 버그 있는지 등도 확인해보고 완성을 목표로 열심히 해야겠다!