Unity/유니티 공부 일지

Unity 연출(텍스트가 0부터 1000까지 증가하면서 출력하는 코드)

handcopper97 2021. 12. 3. 10:45

쿠키런이나 제트팩 조이라이드같은 게임은 게임 오버 시 갔던 길이를 바로 출력하는게 아닌, 0부터 얻은 스코어까지 올라가는 연출을 합니다. 그래야 사용자도 단순히 숫자로 받지 않고 자신의 노력이나 능력을 투영하여 더 실감나게 받아들입니다. 

그래서 오늘은 점수를 0부터 n까지 올라가면서 출력하는 코드를 호스팅하겠습니다.

(예시 영상)

 

 

먼저 출력할 TEXT오브젝트를 생성합니다.

(Unity의 Hierarchy탭에 마우스 우클릭_UI_Canvas를 생성해주시고, 생성된 Canvas를 우클릭_UI_TEXT를 생성합니다.)

그리고 TEXT오브젝트에 새 스크립트를 생성합니다. 스크립트 이름은 Score_Print로 하겠습니다.

 

자 이제 오브젝트는 다 생성되었으니, 아래와 같이 코드를 입력하겠습니다.

    float text_score=0f;
    // Start is called before the first frame update
    void Start()
    {
        text_score=0;
    }

    // Update is called once per frame
    void Update()
    {
        text_score+=1000*Time.deltaTime*0.8f;
        if(text_score>=1000){
            GetComponent<Text>().text = "Score   "+1000.ToString("F0");
        }
        else{
            GetComponent<Text>().text = "Score   "+text_score.ToString("F0");
        }
    }

먼저 변수와 상수들을 설명하면, text_score는 화면에 출력할 0부터 n까지의 수를 변수로 지정한 것입니다.

 

1000은 임시로 지정한 점수입니다. 사용자가 얻은 점수를 static 변수로 지정하여 해당 자리에 넣으면 점수에 맞는 속도로 0부터 얻은 점수까지 증가하면서 출력합니다.

 

0.8f는 임시로 지정한 속도 조절 변수입니다. 저는 딱 0.8이 연출하고 싶은 속도인데, 좀 더 조절하고 싶은 분들은 public 변수로 지정하여 쉽게 원하는 값을 찾을 수 있습니다.

Time.deltaTime은 실행되는 컴퓨터가 1초에 출력할 수 있는 프레임수를 구하여 1/초 당 프레임 수로 반환하는 변수입니다. 그래서 주로 매 프레임마다 실행되는 Update함수와 같이 쓰입니다.

그래서 아래의 코드를 설명하자면

1.

  text_score+=1000*Time.deltaTime*0.8f;

=> 매 프레임마다 text_score에 점수/초 당 프레임 수*0.8를 더해라.

 

 

2.

if(text_score>=1000){

   GetComponent<Text>().text = "Score   "+1000.ToString("F0");
}

=> 매 프레임마다 text_score가 점수보다 크거나 같은지 확인하고, 그것이 참이면 해당 오브젝트의 Text 컴포넌트에서 변수 text를 "Score 점수"로 변경하라는 코드입니다.

 

여기서 점수는 소수점을 없애고 출력해야 되니 ToString("F0")로 작성했습니다. F0이 소숫점을 0만큼 출력이며 1로 변경하면 점수.n으로 소숫점이 한 자리만큼 증가하여 출력됩니다. 

 

 

3.

else{
 GetComponent<Text>().text = "Score   "+text_score.ToString("F0");
}

=> 2번의 조건이 아니라면 text를 "Score (text_score안에 있는 수)"로 변경하여 출력하라는 코드입니다.