유니티(Unity) 프로그래밍

Unity - Animation (2)

게임첫걸음 2024. 10. 31. 17:00

 지난 글에 이어 이번엔 외부 Asset을 가져와 유니티에서 적용하고 캐릭터가 조건에 따라 해당 애니메이션을 재생하도록 구현해보겠습니다. 참고로 인간형 모델 기준입니다. Unity Asset Store에 들어가 원하는 캐릭터와 애니메이션 파일을 본인 Unity 계정에 추가하여 프로젝트에 추가합니다. 아래의 방법으로 프로젝트에 추가합니다.

Project창에 추가한 Asset 폴더가 표시될 겁니다. 이후, 사용할 캐릭터 오브젝트를 Hirearchy창에 옮겨 추가해줍니다. 그리고 만약 해당 캐릭터를 Asset 폴더가 아닌 자신만의 오브젝트로 기능하고 싶다면 Prefabs 폴더 만들고 거기 넣으시면 됩니다. 그럼 이 캐릭터 오브젝트를 기존 Asset대로 사용할 것인지, 아니면 아예 새롭게 사용할 것인지 묻는 대화창이 나올 것인데 원하는대로 선택하시면 됩니다.

이제 애니메이션을 적용할 것인데, Asset에는 기존에 입혀놓은 애니메이션이 존재합니다. 근데 만약 다른 Asset에 존재하는 애니메이션을 입히려면 Inspector창에서 수정해야할 것들이 존재합니다.

해당 애니메이션의 Inspector창에서 Animation Type을 Humanoid로 바꾸고 Apply를 눌러 적용해줍니다. 그리고 해당 오브젝트의 Animator에 Animation 파일을 옮겨 Play해보면 기능이 구현됩니다. Idle 파일을 옮겨봤는데 만약 애니메이션이 작동되지 않는다면 해당 Idle 블럭을 우클릭 한 후, Set as Layer Default State를 선택하면 애니메이션이 재생될 것입니다.

이제 한 캐릭터가 여러 애니메이션을 사용할 수 있도록 만들어보겠습니다. 위의 사진 상 Idle에서 RunForward로 바꾸는 것으로 제작해보겠스니다. 위 Animator창에 Parameters를 클릭하고 + 버튼을 눌러 행동에 사용할 변수를 만들어줍니다. 자료형은 float으로 설정하고 이름은 아무거나 대충 지정해주세요. 우리가 이용할 개념은 W를 누르면 해당 애니메이션이 발동하고 떼면 Idle로 돌아오는 것으로 하겠습니다. 스크립트 제작 전에 우선 애니메이션 사이에 들어가는 화살표를 클릭하고 Inspector창에서 아래의 그림처럼 수정해주세요.

위의 그림이 설명하는 것은 실수형의 AxisV라는 변수값의 크기에 따라 Idle, RunForward를 왔다갔다 한다는 뜻입니다. 이제 코드를 살펴보겠습니다.

using UnityEngine;

public class AnimManager : MonoBehaviour
{
    private Animator anim = null;	//Animator자료형 anim 변수
    
    private void Awake()
    {
    	anim = GetComponent<Animator>();	//Animator 기능을 사용할 anim 변수
    }
    
    private void Update()
    {
    	float axisV = Input.GetAxis("Vertical"); //W 입력에 대한 코드
        anim.SetFloat("AxisV", axisV);		//anim의 float값은 AxisV(W)값에 따름.
    }
}

주석에 코드 줄에 따른 설명을 해놨습니다. 요약하자면 W를 누름에 따라 anim의 float AxisV의 값을 증감소시키라는 뜻입니다. 그럼 Animator상에 조건인 Idle, RunForward가 발동됩니다.

 

'유니티(Unity) 프로그래밍' 카테고리의 다른 글

Unity - Animation (1)  (0) 2024.10.28
UI-Text, Font, Button  (0) 2024.10.22
UI - Sprite, Image 통해 HP 게이지 표현하기  (0) 2024.10.21
UI Canvas  (0) 2024.10.21
코루틴 (Coroutine)을 통한 Picking  (5) 2024.10.03