Unity 기초

헝그리캣 - 레벨 시스템 추가하기

맛밤도토리 2024. 2. 22. 12:07

★ 학습 목표 ★

1. 레벨 시스템 구성 요소 만들기

2. 레벨 수치 증가 시키기

3. 레벨 Text 와 게이지 바 적용 하기

4. 레벨에 따른 고양이와 뚱냥이 생성 적용하기

 

 

 

1. 레벨 시스템 구성 요소 만들기

1) UI Canvas 를 생성한 뒤, 하위 오브젝트 만들기

  ① 파일명 : levelBackground , levelText (UI Text 사용) , back , front

  ② front 의 Inspector 에서 Pivot 을 0으로 설정하고, Scale x값을 0으로 설정한다.

      (레벨 게이지 바가 왼쪽에서 오른쪽으로 차오르게 하기 위해서 둘다 0으로 설정해야 한다.)

Pivot 과 Scale x 값을           0으로 하지 않은 예시

 

 

2) 고양이 레벨 증가 수식 만들기

: HP가 full 인 고양이의 숫자를 카운트 해서 게임 난이도를 설정하기 위해서는 level 을 결정하는 수식을 Script 에서 만들어야한다.

 

[GameManager C# Script]

int level = 0;
int cat = 0;

public void addCat ()
{
    cat += 1;
    level = cat / 5;
}

[설명]
int level = 0;
int cat = 0;
: 고양이를 배부르게 한 횟수를 체크하기 위해 cat 변수를 선언한다.
: 고양이 횟수에 따라 level 값을 변경하기 위해 level 변수를 선언한다.
cat += 1;
: 고양이의 값이 1씩 증가한다.
level = cat / 5;
: 고양이의 값에 5를 나눈 값을 레벨로 저장한다. (고양이를 5마리 이상 잡으면 레벨이 증가)

 

 

 

2. 레벨 수치 증가시키기

: GameManager 에서 고양이의 레벨을 설정하는 수식을 완성했다면, cat Script 에서 레벨 증가 메서드를 작동시키기 위해 코드를 작성해야 한다.

 

[cat C# Script]

bool isFull = false;

private void OnTriggerEnter2D(Collider2D coll)
{
    if (coll.gameObject.tag == "food")
    {
        if (energy < full)
        {
            energy += 1f;
            Destroy(coll.gameObject);
            gameObject.transform.Find("hungry/Canvas/front").transform.localScale = new Vector3(energy / full, 1.0f, 1.0f);
        }
        else
        {
            if (isFull == false)
            {
                gameManager.I.addCat();
                gameObject.transform.Find("hungry").gameObject.SetActive(false);
                gameObject.transform.Find("full").gameObject.SetActive(true);
                isFull = true;
            }
        }
        
    }
}

[설명]
bool isFull = false;
: 고양이의 HP가 full 인지 아닌지 확인하기 위해 bool 을 이용하여 변수를 선언한다.
if (isFull == false)
: 만약 isFull 이 false 라면
gameManager.I.addCat();
: GameManager Script 에서 만든 고양이 레벨업 시스템을 실행시키도록 출력한다.
isFull = true;
: isFull 값을 true 로 변경한다.


※ isFull 변수를 사용하는 이유!
: isFull 변수가 없이 gameManager.I.addCat(); 코드만 있을 경우,
  고양이의 HP가 full 이여도 계속 충돌을 감지하여 레벨이 오르게 되기 때문에
  HP가 full 인 고양이는 충돌 최초 1회만 감지하여 레벨 카운트를 해주기 위해서 사용해야 한다.

 

 

 

3. 레벨 Text와 게이지 바 적용하기

: 레벨과 레벨이 차오르는 게이지 바를 게임 UI 에 적용 시키기 위해서는 코드를 작성해줘야 한다.

 

[GameManager C# Script]

public Text levelText;
public GameObject levelFront;

public void addCat ()
{
    levelText.text = level.ToString();
    levelFront.transform.localScale = new Vector3((cat - level * 5) / 5.0f, 1.0f, 1.0f);
}

[설명]
public Text levelText;
: 레벨을 게임 UI 에서 보여주기 위해 변수를 선언한다.
public GameObject levelFront;
: 다음 레벨업까지 남아있는 UI 바를 보여주기 위해 변수를 선언한다.
levelText.text = level.ToString();
: levelText 는 문자열로 되어 있고, level 변수는 int(숫자형) 으로 되어 있기 때문에 ToString 을 사용해서 형변환을 시켜준다.
levelFront.transform.localScale = new Vector3((cat - level * 5) / 5.0f, 1.0f, 1.0f);
: front GameObject 의 x좌표의 Scale 값이 점점 차오르게 하기 위한 수식을 추가한다.

 

 

 

4. 레벨에 따른 고양이/뚱냥이 생성 적용하기

: level 값에 따라서 고양이와 뚱냥이를 얼마나 많이 생성시킬지 레벨링하기 위한 코드를 작성해 줘야 한다.

 

[GameManager C# Script]

public GameObject fatCat;

void makeCat ()
{
    Instantiate(normalCat);
    if (level == 1)
    {
        float p = Random.Range(0, 10);
        if ( p < 2)
        {
            Instantiate(normalCat);
        }
    }
    else if (level == 2)
    {
        float p = Random.Range(0, 10);
        if (p < 5)
        {
            Instantiate(normalCat);
        }
    }
    else if (level >= 3)
    {
        float p = Random.Range(0, 10);
        if (p < 6)
        {
            Instantiate(fatCat);
        }
    }
}

[설명]
public GameObject fatCat;
: 뚱냥이 GameObject 를 GameManager 에서 사용할 수 있도록 선언해준다.
Instantiate(normalCat);
: 고양이를 생성시킨다. (기본 0레벨 / 고양이 총 1마리 생성)
if (level == 1)
: 만약 레벨이 1이라면
float p = Random.Range(0, 10);
: 0부터 10 사이의 값이 랜덤으로 선택된다.
if ( p < 2)
: 랜덤으로 선택된 값이 2 미만이라면
Instantiate(normalCat);
: 고양이를 생성시킨다. (1레벨 / 고양이   2마리 생성)
else if (level == 2)
: 만약 레벨이 2라면, 레벨1과 동일하게 랜덤한 숫자를 1개 선택한 뒤, 조건이 부합하면 고양이를 생성시킨다.
  (2레벨 / 고양이   3마리 생성)
else if (level >= 3)
: 만약 레벨이 3이상이라면, 위와 동일하게 랜덤한 숫자를 1개 선택한 뒤, 조건이 부합하면 뚱냥이를 생성시킨다.
  (3레벨 / 고양이 3마리 생성, 뚱냥이 1마리 생성 = 고양이 총 4마리 생)