부트캠프/사전캠프

[내일배움 사전캠프_2025JUN19]쉽게 배우는 모바일 게임 2주차 - 풍선을 지켜라 2 (마무리)

Young_A 2025. 6. 19. 18:39

쉽게 배우는 모바일 게임 2주차 - 풍선을 지켜라 2

 

최고점수 구현하기

이전 플레이 기록과 현재 플레이 기록을 비교해서 최고 점수를 산출하는 기능을 구현해야한다.

그러기 위해서는 우선 이전 플레이 기록을 저장하고 불러올 수 있어야 한다.

유니티에서 제공하는 PlayerPrefs를 이용하면 int, float, string, bool 타입으로 저장할 수 있다.

//GameManager class
public Text bestScoreTxt;

//GameManager Gameover()
if (PlayerPrefs.HasKey("bestScore"))
{
    float best = PlayerPrefs.GetFloat("bestScore");
    if(best < time)
    {
        PlayerPrefs.SetFloat("bestScore", time);
        bestScoreTxt.text = time.ToString("N2");
    }
    else
    {
        bestScoreTxt.text = best.ToString("N2");
    }
}
else
{
    PlayerPrefs.SetFloat("bestScore", time);
    bestScoreTxt.text = time.ToString("N2");
}

단, PlayerPrefs.SetFloat("bestScore", time); 과 같이 "bestScore"를 매번 하드코딩을 할 경우 오타로 전혀 다른 key 데이터를 핸들링하는 일이 발생할 수 있기 때문에 GameManager class에 key 라는 string에 "bestScore"를 할당한 뒤, key함수로 대체해주었다.

 

Balloon_Die 애니메이션 구현하기

애니메이션 탭을 열고 Balloon 게임 오브젝트를 선택한 뒤 새로운 애니메이션 클릭(Balloon_Die)를 만든다.

Balloon animator를 열면 각 애니메이션들끼리 트랜지션을 표현하는 다이어그램이 보인다.

Make a transition from Idle to Die은 마우스 우클릭으로 할 수 있고,

Parameters에 bool 형식의 isDie를 만들어준다.

방향표를 클릭하여 has exit time을 체크 해제하고 transition durable을 0로 셋팅해주면 애니메이션 준비 완료.

//GameManager class
public Animator animator;

//GameManager GameOver()
animator.SetBool("isDie", true);
Invoke("TimeStop", 0.5f); //Time.timeScale = 0.0f를 딜레이 시키기 위해서 대체

//GameManager class
void TimeStop()
{
    Time.timeScale = 0.0f;
}

TimeStop()이라는 메소드를 따로 만들어 Invoke를 이용하여 애니메이션이 진행될 시간을 벌어준 뒤, 게임을 정지시킨다.


2주차 숙제

화면 아래로 떨어진 Square들은 보이진 않지만, 게임 내에 존재한다.

이게 쌓이면 Square라는 오브젝트를 무한대로 구현해야 하기 때문에 실행이 버거울 수 있을 것 같다.

따라서 2주차 숙제는 화면 바깥으로 벗어나는 Square들을 Destroy 하는 것을 숙제로 내주셨다.

x축은 신경쓰지 않고 y축 값만 신경 썼을 때, y값이 -6.0 이하로 떨어질 경우 해당 오브젝트를 Destroy 하기로 했다.

플레이어 커서에 부딪혀서 화면 양 옆으로 튀어나갈 가능성도 생각해보았지만, 그럴 경우에도 계속해서 중력에 의해 하강하기 때문에 큰 문제가 없을 것 같다.

//Square Update()
if(transform.position.y < -6.0f)
{
    Destroy(gameObject);
}

느낀점

이번주 숙제를 제출하면서 지난주 숙제 제출에 양식이 있는 걸 처음 알았다..!

그래서 지난주 숙제를 제출했는데 지난주 숙제 제출파일 이름 예시와 이번주 숙제 제출파일 이름 예시가 똑같아서 이걸 어떻게 검사하시는거지..? 라는 생각이 들었지만 일단 양식은 양식이니까 제출했다.

 

강의를 따라가는 것도 재밌지만, 강의를 수동적으로 따라가는 것이 아니라 스스로 구현할 기능을 생각하고 목표를 달성해보고 싶은 생각이 들었다.

이번주 내로 모든 강의를 들을 수 있으면 좋을텐데 내일 1on1도 있어서 절대 안될 것 같다...

사전캠프 기간이 3주나 된다고 생각했는데 내일만 지나면 벌써 2주가 지나는 거라 생각보다 짧다는 생각이 들었다. 조금 더 분발해야지.


내일 학습 할 것은 무엇인지

내일은 조금 더 빡세게 목표를 잡아보려고 한다.

벼락치기 속성인지라 루즈한 목표는 오히려 게으름 피울 빌미를 주는 것 같다.

3주차 완강 및 4주차 진행까지 해보면 좋을 것 같다.

1on1이 16:30에 예정되어 있으니 그 전에 3주차를 끝내고 1on1으로 기분전환하고 4주차를 진행해보려고 한다.