본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] 캐릭터 애니메이션과 이벤트 - 발자국 소리

by 레오란다 2023. 1. 9.
반응형

이번 글은 이전에 작성한 포스팅에서 이어집니다.

 

 

[유니티 활용] 마우스 클릭한 곳으로 부드럽게 바라보며 캐릭터 이동시키기

이번 글에서는 디아블로와 같은 게임처럼 화면상에 마우스 클릭한 곳을 부드럽게 바라보며 캐릭터를 이동시키는 방법에 대해 알아보도록 하겠습니다. 실습에 사용할 캐릭터는 다음의 링크에서

ugames.tistory.com

 

이번 글에서는 캐릭터가 이동할 때 걷기 동작을 하고 발이 바닥에 닿는 순간 이벤트를 발생시켜 발소리를 재생하는 법에 대해 알아보도록 하겠습니다.

 


추가 준비물 - 사운드 에셋

 

Footsteps - Essentials | 기타 효과음 효과음 | Unity Asset Store

Layer in the sounds of Footsteps - Essentials from Nox_Sound for your next project. Browse all audio options on the Unity Asset Store.

assetstore.unity.com

발자국 소리를 내기 위해 추가로 사운드 에셋을 다운로드 받아 import 해주세요.

 


새로운 Animator 생성

Project 창의 Assets 폴더에서 마우스 우클릭 [Create > Animator Controller] 로 새로운 Animator Controller 를 생성하고 이름을 Hero 로 변경해줍니다.

 

Animator Controller "Hero" 를 Player 객체의 Animator 컴포넌트에 있는 Controller 필드에 다음과 같이 연결합니다. 잠시 비활성화 시켜 놓았던 Animator 도 다시 활성화시킵니다.

 

 

 

▶ Idle Animation

생성한 Animator Controller 인 Hero 를 더블 클릭하면 Animator 창이 열립니다. 아래와 같이 Animator 창에 [RPG Tiny Hero Duo] 에셋에 있는 "Idle_Normal_SwordAndShield" animation 을 등록합니다. 

 

Animator 설정 - Idle
Idle animation 등록

등록한 "Idle_Normal_SwordAndShield" State 를 클릭하고 Inspector 창에서 이름을 Idle 로 변경해 주세요.

 

 

Move Animation

이번엔 아래와 같이 "MoveFWD_Normal_InPlace_SwordAndShield" 를 등록하고 이름을 Move 로 변경해 주세요.

 

Animator 설정 - Move
Move animation 등록

 

Parameter 생성

State 변환의 조건으로 사용할 파라미터를 등록합니다. 파라미터는 아래의 그림과 같이 Bool 형식으로 선택하고 이름을 ㅑIsMove 로 합니다. 

 

파라미터 IsMove 등록
파라미터 IsMove 등록

 

Transition 연결

Idle 을 선택하고 마우스 우클릭 [Make Transition] 을 선택한 후 Move state 를 선택합니다. 아래 이미지의 하단에 있는 Conditions 를 위에서 등록한 파라미터 IsMove 를 선택하고 true 로 선택합니다. 

 

이렇게 하면 animation 상태가 Idle 일 때 IsMove 파라미터가 true 가 되면 Move state 로 변경됩니다.

 

Transition 연결 Idle > Move
Idel > Move Transition

 

 

이번엔 반대로 Move 를 선택하고 마우스 우클릭 [Make Transition] 을 선택한 후 Idle state 를 선택합니다. Conditions 에 파라미터 IsMove를 선택하고 false 를 선택합니다. 

 

애니메이션이 Move 상태일 때 IsMove 파라미터가 false 가 되면 Idle state 가 됩니다.

 

Transition 연결 Move > Idle
Move > Idle Transition


 

반응형

 


 

애니메이션 이벤트 만들기

이제 발소리를 내기 위해 Move 애니메이션의 특정 프레임에 이벤트를 넣는 방법을 알아보도록 하겠습니다. Animator 창에서 Move state 를 더블클릭하면 Inspector 창에 다음과 같은 내용이 나타납니다.

 

애니메이션 이벤트 설정

 

먼저 Inspector 창의 화면이 좌측과 같다면 아래의 빨간 테두리 영역을 클릭해주면 오른쪽과 같이 바뀝니다.

 

우측의 1 번 영역을 좌우로 움직이면 애니메이션을 프레임 단위로 움직일 수 있습니다. 애니메이션을 움직이면서 다리가 땅에 닿는 부분에서 2번을 클릭하면 해당 프레임에 이벤트가 만들어지고 3번에 이벤트 이름을 입력하면 됩니다. 

 

왼쪽 오른쪽 다리가 닿는 부분을 찾아 이벤트를 만들어주고 이름은 동일하게 FootStep 으로 해주세요. 작업을 완료하면 [Apply] 버튼을 클릭해 주세요.


 

Player 스크립트 수정

Player 스크립트를 다음과 같이 수정합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
   Vector3 destPos;
   Vector3 dir;
   Quaternion lookTarget;

   bool move = false;

   // Animator 컴포넌트
   Animator anim;
   
   // 발소리 오디오 클릭
   public AudioClip footstep;

   // Start is called before the first frame update
   void Start()
   {
      // Animator 컴포넌트 가져오기
      anim = GetComponent<Animator>();
   }

   // Update is called once per frame
   void Update()
   {
      if (Input.GetMouseButtonDown(0))
      {
         RaycastHit hit;
         var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         if (Physics.Raycast(ray, out hit, 100f))
         {
            destPos = new Vector3(hit.point.x, transform.position.y, hit.point.z);
            dir = destPos - transform.position;
            lookTarget = Quaternion.LookRotation(dir);

            move = true;
         }
      }

      Move();
   }

   void Move()
   {
      if (move)
      {
         transform.position += dir.normalized * Time.deltaTime * 2f;
         transform.rotation = Quaternion.Lerp(transform.rotation, lookTarget, 0.25f);
         move = (transform.position - destPos).magnitude > 0.05f;
      }

      // IsMove 파라미터 값 설정
      anim.SetBool("IsMove", move);
   }

   // FootStep 이벤트
   void FootStep()
   {
      // 이벤트가 발생하면 발소리 사운드 재생
      AudioSource.PlayClipAtPoint(footstep, Camera.main.transform.position);
   }
}

 

발소리 Audio Clip 연결

다운받은 발자국 소리 에셋에 있는 사운드 파일 중 하나를 다음과 같이 Palyer 스크립트의 footstep 필드에 연결합니다.

 

발소리 오디오 클립 연결
발소리 오디오 클립 연결


이제 Play 를 하고 마우스로 바닥을 클릭하면 Move 애니메이션과 발소리가 들리면서 캐릭터가 이동하게 됩니다. 이동하지 않으면 Idle 애니메이션이 플레이 됩니다. 아래는 애니메이션 GIF 라 소리가 나지 않아 아쉽습니다.

 

animation gif - result

 

 

 

반응형

댓글