스파르타 게임개발종합반(Unity)/사전캠프 공부 기록

[Unity/2D] 레벨 시스템 구현 - UI, text, ToString, localScale

테크러너 2024. 4. 4.

고양이 5마리를 배부르게 하면 1레벨이 오르는 레벨링 시스템을 구현해보겠습니다.

 

게이지가 차오르는 UI 설정은 아래 게시글들을 참고해주세요.

2024.04.03 - [Unity/2D] - [Unity/2D] 체력바 만들기 - Canvas, UI, Anchors

2024.04.03 - [Unity/2D] - [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale

 

 

GameManager.cs

    public RectTransform levelFront;
    public Text levelTxt;
    
    int level = 0; // 현재 레벨
    int score = 0; // 점수 5점당 1레벨
    
    public void AddScore()
    {
        score++;
        level = score / 5; // 0~4는 0레벨, 5~9는 1레벨 이런식으로 몫을 구함
        levelTxt.text = level.ToString();
        levelFront.localScale = new Vector3((score - level * 5) / 5.0f, 1f, 1f); // ex. 점수가 12면 12 - 10 = 2가 됨
                                                                                 // 소수점값을 얻기 위해 5.0f(실수값)으로 나누어줌
    }

게임매니저에서 점수가 오르는 함수를 작성했습니다.

 

 

Cat.cs

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Food"))
        {
            if(energy < full) // 현재 체력 < 전체 체력
            {
                // 체력바 게이지 상승
                energy += 1.0f;
                front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // 현재 체력을 최대 체력으로 나누어서 비율을 계산

                // 고양이에게 맞은 Food는 파괴
                Destroy(collision.gameObject);

                // 게이지가 다 차고 바로 fullCat으로 바뀌게 하기 위해서 여기에 코드 작성
                if (energy == 5.0f) // 체력바가 다 찬 상태
                {
                    // 점수를 더할 때 배가 부른 고양이가 Food에 또 맞게 되면 발생하는 문제 방어
                    if (!isFull)
                    {
                        isFull = true;
                        hungryCat.SetActive(false);
                        fullCat.SetActive(true);
                        Destroy(gameObject, 3.0f); // 3초 후 고양이 파괴
                        GameManager.Instance.AddScore();
                    }
                }
            }
        }
    }

배가 부른 고양이가 되면 GameManager.Instance.AddScore(); 로 점수를 획득하게 구현했습니다.

'isFull'을 넣은 이유는 'if (energy == 5.0f)' 조건문만 있었을 때 배가 부른 고양이가 Food에 또 맞게 되면 점수가 오르기 때문에 이를 방지하고자 넣었습니다.

 

 

결과

반응형

댓글