본문 바로가기
유니티 게임 개발

[유니티 강좌] 2D RPG 게임 만들기 - 3 / 공격 애니메이션

by 호일이 2020. 5. 6.

소드맨의 공격을 구현해볼 건데 그전에 한 가지 수정해야 할 것이 있습니다.

GetAxis함수로 방향 전환할 때 애니메이션이 끊기는 현상이 있습니다.

 

[2021/04/13 추가내용 : GetAxis함수로 방향 전환해도 끊기지 않게 설정할 수 있었습니다. 이 포스팅에서 Input.GetKey()함수로 진행하였으므로 포스팅 내용대로 진행하시면 됩니다.]

 

이 함수를 Input.GetKey() 함수로 교체하겠습니다.

이동함수 수정 전                                                                                수정 후

Input.GetKey(키코드) : 키를 꾹 누르고 있을 때 true 반환

Vector3.right, left : new Vector3(1,0,0) , new Vector3(-1,0,0) 와 같음

 

 

공격 애니메이션

Parameters에서 Trigger를 생성해주고 이름은 attack으로 합니다.

3가지 Transition을 생성해줍니다.

 

Any State?

어떤 애니메이션이 실행되고 있더라도 연결된 애니메이션을 실행할 수 있습니다.

Attack애니메이션을 Idle과 Run으로 연결한 이유는 공격이 끝났을 때 자연스럽게 해당 애니메이션을 실행하기 위해서입니다.

 

Any State -> Attack

Idle과 Run처럼 설정하고 하고 (Transition Duration : 값 올릴수록 천천히 실행)

Conditions에 attack 추가

 

Attack -> Run

Conditions에 moving true 추가

Attack이 끝났을 때 움직이고 있다면 Run으로 연결합니다.

 

중요!

Has Exit Time을 체크하지 않으면 Attack 애니메이션이 중간에 끊깁니다.

Exit Time이란 지정된 시간 후에 애니메이션이 전환된다는 뜻입니다.

Trigger로 실행된 Attack이 실행되자마자 끊기면 안 되니 0.8정도 수치를 넣어주고 부드럽게 연결되기 위해 Transition Duration을 0.2 줬습니다.

 

Attack -> Idle

Conditions에 moving false 추가

 

마찬가지로 Exit Time에 0.8을 입력했습니다.

 

 

스크립트에 공격키를 추가합시다.

Input.GetKeyDown(KeyCode.A) : A키를 누르면 true를 반환합니다.

 

animator.GetCurrentAnimatorStateInfo(0).IsName(애니메이션 이름 A) :

A 애니메이션이 실행되고 있다면 true를 반환합니다.

 

해석하면 "A키를 눌렀을 때 Attack 애니메이션이 실행되고 있지 않다면 trigger 실행" 입니다.

저 코드가 없어도 되지만 없으면 A키를 연타할 때 공격 애니메이션이 조금 그렇습니다.

 

실행 화면

0

 

 

다음 포스팅에서 적을 만들고 공격에 맞으면 적의 HP가 줄어드는 것을 구현하겠습니다.

 

 

읽어주셔서 감사합니다.

반응형

댓글