헝그리캣 - 레벨 시스템 추가하기
★ 학습 목표 ★
1. 레벨 시스템 구성 요소 만들기
2. 레벨 수치 증가 시키기
3. 레벨 Text 와 게이지 바 적용 하기
4. 레벨에 따른 고양이와 뚱냥이 생성 적용하기
1. 레벨 시스템 구성 요소 만들기
1) UI Canvas 를 생성한 뒤, 하위 오브젝트 만들기
① 파일명 : levelBackground , levelText (UI Text 사용) , back , front
② front 의 Inspector 에서 Pivot 을 0으로 설정하고, Scale x값을 0으로 설정한다.
(레벨 게이지 바가 왼쪽에서 오른쪽으로 차오르게 하기 위해서 둘다 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마리 생) |