소드맨의 공격을 구현해볼 건데 그전에 한 가지 수정해야 할 것이 있습니다.
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키를 연타할 때 공격 애니메이션이 조금 그렇습니다.
실행 화면
다음 포스팅에서 적을 만들고 공격에 맞으면 적의 HP가 줄어드는 것을 구현하겠습니다.
읽어주셔서 감사합니다.
'유니티 게임 개발' 카테고리의 다른 글
[유니티 강좌] 2D RPG 게임 만들기 - 6 / Translate의 문제점과 대안 (8) | 2020.06.06 |
---|---|
[유니티 강좌] 2D RPG 게임 만들기 - 5 / 적 공격하기 (69) | 2020.05.23 |
[유니티 강좌] 2D RPG 게임 만들기 - 4 / 적과 체력바 만들기 (41) | 2020.05.11 |
[유니티 강좌] 2D RPG 게임 만들기 - 2 / 캐릭터 움직이기 (74) | 2020.04.28 |
[유니티 강좌] 2D RPG 게임 만들기 - 1 / 캐릭터 생성 (22) | 2020.04.26 |
댓글