[Unity Project] <ShootOut2D> 2D 슈팅 게임 만들기(13) 코인 점수 표시하기, UI 메뉴 이미지 추가하기

2023. 9. 22. 17:38Unity

728x90
반응형

프로젝트에 Text(Legacy)를 추가하고 적절한 폰트를 설정한 후 코인 점수를 표시할 용도로 중앙 위쪽에 Text를 위치시킨다.

 

 

앵커는 최상단을 따라가게 하여 좌우에 영향을 받지 않게 한다.

 

 


 

 

public class GameManager : MonoBehaviour
{
    public Text gemScore;
    ...

gemScore 변수를 추가한 후

void Start()
{
    gem = 0;
    gemScore.text = gem.ToString();
}

gemScore의 텍스트에 float 형의 gem을 string으로 바꿔 대입한다.

 

 


 

 

이제 PlayerScript에서 OnTriggerEnter2D에서 gem을 먹을 때 스코어가 올라가게 설정하면 된다.

 void OnTriggerEnter2D(Collider2D collision)
 {
     if(collision.gameObject.tag == "Item")
     {
         GemScript gemScript = collision.gameObject.GetComponent<GemScript>();
         GameManager.instance.gem += gemScript.gem;
         GameManager.instance.gemScore.text = GameManager.instance.gem.ToString();
         Destroy(collision.gameObject);
     }
     ...

GameManager.instance.gemScore.text에 GameManager.instance.gem 값을 string으로 바꿔서 대입하면 된다.

 

 

점수가 잘 올라간다.

 

 


 

 

젬 이미지 추가

Canvas에 Gem 이미지를 추가하였고, 최상단에 앵커 포인트를 설정하였다.

 

 


 

 

Pause 버튼 적용

적절한 GUI 스킨을 구해 UI 버튼을 적용할 것이다.

 

 

Canvas에 버튼을 추가하였고 일시정지 스프라이트를 적용하였으며 버튼 안에 Text는 지운다.

 

 


 

 

Pause 화면을 띄우기 위해 Canvas 밑에 [UI] - [Panel]을 하나 만들고, Pause 화면에 UI를 띄우기 위해 안에 Panel을 하나 더 만든다.

 

 

내부 패널은 가운데로 위치하도록 Rect Transform 값을 위와 같이 수정한다.

 

 

일시정지 메뉴로 쓸만한 스프라이트를 적용하고 메뉴 이름을 적용한다. 메뉴 이름의 앵커는 메뉴 패널의 최상단으로 설정한다.

 

 

이제 코드를 수정하여 Pause 버튼을 눌렀을 때 메뉴가 나오도록 설정한다.

public class GameManager : MonoBehaviour
{
    public Text gemScore;
    public GameObject pauseMenu;
    ...

GameManager 스크립트에 pauseMenu를 가져와 적용하고,

 

 

public void PauseAction()
{
    Time.timeScale = 0;
    pauseMenu.SetActive(true);
}

PauseAction 함수에서 Time.timeScale = 0; 으로 설정하면 게임이 멈추고

SetActive(true)로 일시정지 메뉴를 활성화한다.

 

 

버튼의 On Click() 부분에 GameManager를 끌어다 놓고 PauseAction() 함수 기능을 선택한다.

 

 

 

 


 

 

UI 스프라이트에는 나인패치를 해야 한다. Sprite Editor에서 각 모서리를 안쪽으로 당겨서 설정하는 것이다.

 

나인패치를 하는 이유는 확대 축소가 될 때 해당 내부 영역만 확대 축소가 되어 버튼의 테두리가 번지는 것을 방지할 수 있기 때문이다.

 

 

눌리는 스프라이트도 적용할 예정이므로 Button의 Transition을 [Sprite Swap]으로 바꾸고 Pressed Sprite에 눌려진 버튼을 적용한다.

 

 

이제 코드를 수정하여 버튼에 기능을 넣는다.

 

 

public void ResumeAction()
{
    Time.timeScale = 1;
    pauseMenu.SetActive(false);
}
public void MainMenuAction()
{
    Time.timeScale = 1;
    pauseMenu.SetActive(false);
}

GameManager 스크립트에 위의 내용을 입력한 후

각 버튼에 기능을 적용한다.

 

 

728x90
반응형