유니티 에셋 스토어에 있는 캐릭터를 다운받고 유니티 프로젝트에 적용해 봅시다!

우선 저는 귀여운 동물들이 있는 무료 에셋을 골랐습니다. 😄

animal_asset

프로젝트

에셋 추가

마음에 드는 에셋을 골랐다면 프로젝트에 추가해 줍니다. Package Manager - My Assets 에 스토어에서 고른 에셋이 보이는데 여기서 다운로드 받은 후 Import 시켜줍니다.

package_manager

적용

캐릭터가 있을 땅을 하나 만들어주고, 그 위에 추가한 에셋을 추가해 보겠습니다.

create_plane

3D Object 에서 Plane 을 눌러 땅을 추가했고 카메라를 조금 더 위에 두어 시야를 조정했습니다!

이제 방금 받은 에셋을 추가해 보겠습니다. 보통 에셋을 받으면 Animation, Prefab, Model 등과 같은 폴더가 있는데, 제작자가 미리 만들고 구성해 놓은 Prefab1을 사용하면 됩니다.

강아지를 아래 사진과 같이 하이어라키에 끌어서 옮겨 볼까요?

add_prefab

💡 에셋을 추가하면 제작사 이름 밑에 사용할 것이 있습니다. 저는 폴더명을 변경해 주었습니다.

dog

강아지가 추가 되었습니다. 이제 애니메이션도 넣어보겠습니다.

🚀 애니메이션 추가하기

애니메이션 또한 에셋에 모두 포함되어 있어서 가져다 사용하면 됩니다! 👍

애니메이션을 사용하기 위해 Animator Controller 를 만들어서 설정해야 합니다. 아래 사진과 같이 추가해 줍니다.

create_animator

이제 만들어진 애니메이터를 더블 클릭하면 아래 사진과 Animator 탭을 볼 수 있습니다. 이 곳에 추가된 프리팹의 애니메이션을 몽땅 가져다가 추가해 줍니다.

add_animation

그리고 애니메이션 효과가 무한 반복될 수 있도록 Loop time 도 체크해 주세요!

apply_loop_time

애니메이터 컨트롤러를 추가한 에셋에 적용합니다. 이 때 하이어라키에 있는 객체에 적용하면 프리팹 템플릿 자체가 변경되므로 언패킹을 통해 원본이 수정되는 일을 차단할 수 있습니다.

prefab_unpack

이제 애니메이터를 해당 객체에 붙여야 하는데 아래 사진과 같이 여러 계층이 있어 어디에 애니메이터를 붙여야 할지 잘 모르겠습니다.

이 때 Mesh renderer2 컴포넌트를 찾은 후 해당 객체의 부모에 붙여주면 됩니다.

append_animator

이제 플레이 버튼을 눌러 확인해 볼까요?

dog_animator

아무것도 하지 않을 때 고개도 돌리고, 자연스러운 행동을 합니다! 😎

이제 특정 행동을 할 때(걷거나 뛰기) 애니메이션이 전환될 수 있도록 해보겠습니다!

애니메이션 전환

강아지는 현재 위치에서 다른 곳으로 이동할 때 걷거나 뛰어야 할겁니다. 그러기 위해 조건을 체크할 수 있는 변수해당 조건에 어떤 행동을 할 것인지 정의가 필요합니다.

애니메이터 우측 Parameters 탭으로 이동 후 조건을 체크할 수 있는 변수 두 개를 추가해 줍니다.

create_animation_parameter

이제 애니메이션이 어디에서 어디로 전환될 것인지도 추가해야 합니다. 아래와 같은 경우가 있겠죠?

  1. 아무것도 하지 않을 때 → 뛰기
  2. 뛰기 → 아무것도 하지 않을 때
  3. 아무것도 하지 않을 때 → 걷기
  4. 걷기 → 아무것도 하지 않을 때
  5. 뛰기 → 걷기
  6. 걷기 → 뛰기

아래 그림과 같이 Make Transition 을 누른 후 다음 애니메이션 효과를 누르면 화살표가 이어집니다. 위 내용처럼 모두 이어주세요!

create_transition

create_transition2

그리고 조건을 입력해 줍니다. 아래와 같이 생성된 Transition 을 눌러 인스팩터 창에서 조정합니다.

set_condition

이제 애니메이션 변수를 컨트롤 해줄 수 있는 스크립트를 생성하고 이에 맞게 애니메이션을 전환하면 됩니다!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using UnityEngine;

public class DogScript : MonoBehaviour
{
    private float speed = 3.0f;
    private Vector3 moveVector;
    private float horizontal = 0f;
    private float vertical = 0f;


    private Animator animator;

    private void Awake()
    {
        moveVector = new Vector3();

        animator = GetComponentInChildren<Animator>();
    }

    private void Update()
    {
        horizontal = Input.GetAxis("Horizontal");
        vertical = Input.GetAxis("Vertical");

        moveVector.x = horizontal;
        moveVector.z = vertical;

        if (moveVector != Vector3.zero)
        {
            transform.position += moveVector.normalized * speed * Time.deltaTime;
            transform.forward = Vector3.RotateTowards(transform.position, moveVector.normalized, speed, Time.deltaTime);

            animator.SetBool("isRun", true);
        }
        else
        {
            animator.SetBool("isRun", false);
        }
    }
}
  • 17: 애니메이터 컴포넌트를 가져옵니다.
  • 28: 키보드로부터 입력이 있어서 moveVectorzero 값이 아니라면
  • 30-31: 객체의 포지션과 방향을 변경하고
  • 33: isRun 조건 변수를 true 로 변경해서 애니메이션 전환을 합니다
  • 37: 키보드로부터 입력이 없다면 유휴 상태로 전환합니다.

해당 객체를 제일 상단에 있는 객체에 붙여서 플레이를 해보겠습니다!

dog_animator_transition

움직임이 이상합니다 😕

움직이자마자 애니메이션 전환이 되지 않습니다. 즉각적으로 애니메이션 전환이 필요할 경우 아래 사진과 같이 Has Exit Time 옵션을 꺼주시면 됩니다!

immediate_action

💡 하나씩 해제하셔야 합니다.

dog_animator_transition2.gif

각주


  1. 프리팹 에셋은 씬에 새로운 프리팹 인스턴스를 만들기 위한 템플릿 역할을 합니다. ↩︎

  2. 렌더링(rendering) 또는 이미지 합성은 컴퓨터 프로그램을 사용하여 2D 또는 3D 모델에서 사실적인 이미지(photorealistic) 또는 사실적이지 않은 이미지(non-photorealistic)를 생성하는 프로세스이다. ↩︎