Unity - Animation

이현석·2022년 11월 6일
0

Unity

목록 보기
3/5
post-thumbnail

Animation이란?

Unity 애니메이션 시스템은 Unity의 가장 작은 개념인 Animation Clip 개념에 기반하고 있으며, 특정 오브젝트의 포지션과 각도, 기타 프로퍼티가 시간이 지남에 따라 어떻게 변화해야 하는지에 대한 정보를 포함하고 있다.

가타부타 할 것 없이.. 바로 예제를 살펴 보자.

애니메이션 생성

1. 간단한 애니메이션 입히기

애니메이션 폴더를 만들고 (Asset -> Animation)
Animation 파일을 만들어 Animation Clip을 생성한다.
그러면 1차적으로 Animation을 만들기 위한 기초 작업은 다 끝난다.
(Loop Time은 반복해서 실행 할 것인지를 선택하는 것)

Animation Clip을 Drag&Drop으로 아래와 같이 sprite에 끌어 놓는다.
-> Unity는 Drag&Drop으로 오브젝트 간의 관계나 참조를 지정할 수 있어 굉장히 직관적이다.

이제.. Controller가 생긴 것을 확인 할 수 있다.
-> Controller : Animation을 제어 하는 것 (ex : 일반 상태/점프할 때/공격할 때 어떤 애니메이션을 써라) [이것도 실제로는 절차도 UI로 되어 있어 직관적임..]
-> Animation : 실제 동작 파일

2. 기본 Animation 동작 만들기

.anim 파일 더블 클릭 후 동작 방식 지정 해 주기
-> 동작할 객체를 클릭하고 Animation에서 레코드 (빨간색 동그라미)를 눌러서 셋팅 해준다.
여기서 주의 할 점은 처음 모습 그대로를 표현 해주더라고 아무값이나 한번 값 지정이 필요하다.

만약 캐릭터의 이미지 지정이 필요하면 적당한 시간 간격으로 필요한 이미지를 Drag&Drop 하기만 하면 된다.

3. Animator로 동작 제어하기

Game 종료 시 다른 animation 동작하기 위해서 새로운 anim 파일을 생성한다.

-> 기본 Animation 동작을 만들어 준다

Animator 오픈하여 동작을 원하는 곳에 오른쪽 클릭하여 Make Transition으로 동작 순서 지정한다.

-> 여기서는 아래 동그라미가 다른 객체에 맞아 게임이 끝나면 다른 animation으로 게임이 끝나게 하는 것을 만들어 본다.

상기 이미지와 같이 isDie라는 변수를 만들고 상태값이 변할때(A.anim ->b.anim) Delay가 없도록 설정한다. (Has Exit Time 체크 해제)

-> 애니메이션 전환을 위해 gameManager 설정 필요하다.

    float alive = 0f;
    public GameObject endPanel;
    public Text thisScoreTxt;
    public Text maxScoreTxt;
    bool isRunning = true;
    public Animator anim;

    
	public void gameOver()
    {
        anim.SetBool("isDie", true);

        isRunning = false;
        Invoke("timeStop", 0.5f); //timeStop 함수를 0.5초 후에 실행 하라
        thisScoreTxt.text = alive.ToString("N2");
        endPanel.SetActive(true); //endPanel의 상태를 Active 상태로 변경

        // 처음 플레이 할때 최고 점수 갱신
        //Unity의 경우 값을 저장할때 Key,Value pair로 값을 저장한다. (PlayerPrefs를 이용)
        if (PlayerPrefs.HasKey("bestScore") == false)
        {
            PlayerPrefs.SetFloat("bestScore", alive);
        }
        else//최고 점수보다 내 점수가 높을때 점수 갱신
        {
            if (PlayerPrefs.GetFloat("bestScore") < alive)
            {
                PlayerPrefs.SetFloat("bestScore", alive);
            }
        }
        float maxScore = PlayerPrefs.GetFloat("bestScore");
        maxScoreTxt.text = maxScore.ToString("N2");
    }
    public void retry()
    {
        /// MainScene을 Reload한다.
        SceneManager.LoadScene("MainScene");
    }

    /// <summary>
    /// 애니메이션간 전환 시간이 없기 때문에 0.5 delay 생성 후 별도의 timeStop 함수 실행
    /// </summary>
    void timeStop()
    {
        Time.timeScale = 0.0f;
    }

이렇게 하면 Animation clip이나 Controller 설정에 대한 설명은 충분히 하였으리라고 본다.
워낙 직관적인 Tool이라 객체 간의 관계나 상세 detail만 설정 잘 해주면 간단한 게임 구현은 간단한듯 하다..

profile
溫故知新

0개의 댓글