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

[Unity/2D] 풍선 터지는 애니메이션 만들기, New Clip(클립) 만들기 - Animation, Animator, Create New Clip

테크러너 2024. 4. 2.

Ballon_Die 애니메이션 클립 만들기

Assets → 'Ballon_Idle' 더블 클릭

Hierarchy → MainScene → 'Balloon' 더블 클릭

 

 

애니메이션 창이 뜨지 않는다면? 더보기란▼

 

 

Balloon_Idle 밑에 'Create New Clip' 클릭

 

Animations 클릭

 

'Balloon_Die' 라는 이름으로 저장

 

녹화버튼을 누르고, 20으로 이동 후

Color 값 RGBA(255, 0, 0, 125) 설정

Scale 값 X, Y(2, 2) 설정

이후 녹화버튼 정지!

 

Balloon_Die 로 가서 Loop Time 끄기! (딱 1번만 실행)

 

 

Balloon Animator - 애니메이션 전환 적용하기

Balloon 이라는 Animator 더블 클릭

 

들어가보면 이런 화면이 나옵니다.

 

이렇게 화면을 이동하고 싶다면

Alt + 좌클릭 or 마우스 휠 꾸욱 누르기

 

Ballon_Idle 우클릭 → Make Transition 클릭

 

Balloon_Die에 연결해주기

 

Parameters   '+'버튼   Bool 버튼 클릭

 

이름은 'isDie'로 설정

 

이 화살표가 'isDie'가 true 일 때 넘어가게끔 설정해보겠습니다.

 

화살표를 누르면 Inspector에 이런 창이 뜨는데요, 맨 밑에 Conditions에서 '+' 버튼을 클릭하면 위와 같이 isDie, true 로 설정됩니다. 이 의미는 isDie가 true 일 때 Balloon_Idle 에서 Balloon_Die 애니메이션으로 넘어가는 것입니다.

 

다음으로 Has Exit Time해제해주었습니다.

해제해주면 언제든지 다음 애니메이션으로 넘어가겠다는 의미입니다.

 

Settings 를 열고, Transition Duration과 Transsition Offset을 모두 0으로 만들어주었습니다.

Transition Duration과 Transition Offset을 모두 0으로 만들어주는 것은 애니메이션의 전환 시간과 오프셋을 없애는 것을 의미합니다. 자세한 내용은 더보기란▼

더보기

Transition Duration은 애니메이션 전환에 걸리는 시간을 나타내는 값이며, Transition Offset은 애니메이션의 시작 시점을 조절하는 값입니다. 이 두 값이 모두 0이라면 애니메이션 전환에 시간이 소요되지 않고, 시작 시점도 조절되지 않기 때문에 애니메이션의 변화가 즉시 발생하게 됩니다.

따라서 Transition Duration과 Transition Offset을 모두 0으로 만들어주면 애니메이션의 전환 과정이 없어지고, 즉각적으로 변화가 일어나는 효과를 줄 수 있습니다.

 

 

코드에서 애니메이션 실행하기

이제 게임 오버가 됐을 때 Balloon_Die 애니메이션이 실행될 수 있게 해보겠습니다.

 

GameManager.cs

    public void GameOver()
    {
        isPlay = false;
        anim.SetBool("isDie", true); // 게임 종료시 풍선이 터지는 애니메이션으로 전환
        Time.timeScale = 0.0f; // 타임의 크기 = 0 -> 멈춘것과 같음
        nowScore.text = time.ToString("N2");
        
        // 이하 생략
    }

 

게임 매니저에 Balloon 애니메이터를 넣고 실행해보면!

 

안됩니다 ~~

 

왜 그럴까요?

애니메이션이 작동해야할 시간이 있기 때문입니다.

    public void GameOver()
    {
        isPlay = false;
        anim.SetBool("isDie", true); // 게임 종료시 풍선이 터지는 애니메이션으로 전환
        Time.timeScale = 0.0f; // 타임의 크기 = 0 -> 멈춘것과 같음        
        // 이하 생략
    }

애니메이션을 실행해! 하고 난 후 Time.timeScale = 0.0f;게임의 시간을 멈췄죠?

그러니까 애니메이션이 작동하지 않고 게임 시간이 멈춘 것입니다.

그렇다면 Time.timeScale = 0.0f;가 실행되기 전에 딜레이를 주면 되겠죠?

 

    public void GameOver()
    {
        isPlay = false;
        anim.SetBool("isDie", true); // 게임 종료시 풍선이 터지는 애니메이션으로 전환
        Invoke("TimeStop", 0.5f);
        // 이하 생략
    }

    void TimeStop()
    {
        Time.timeScale = 0.0f; // 타임의 크기 = 0 -> 멈춘것과 같음
    }

Time.timeScale = 0.0f; 코드는 TimeStop() 함수에 넣고, Invoke를 사용해서 함수를 0.5f초 이후에 실행되도록 했습니다.

Invoke는 (실행할 함수, 몇 초 후에 실행할건지) 채워넣으면 됩니다. 딜레이 효과를 넣는 것이죠.

 

InvokeRepeating 이 궁금하다면?

2024.03.28 - [Unity/2D] - [Unity/2D] 빗방울 프리팹 반복 생성 - Instantiate(), InvokeRepeating()

 

 

이제 실행해보면!

 

이제 애니메이션이 잘 실행되네요~

 

반응형

댓글