![[유니티] 간단한 방법으로 공격 콤보 구현하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbB8wd%2FbtsGppe1q7f%2FvK7xh91xKRwW5ER67DYy2k%2Fimg.jpg)

간단한 애니메이션 이벤트로 공격 콤보 구현
대충 이론은 다음과 같다
1번 째 애니메이션
|--------|---------------------|---------|-------------|
여기서 다음콤보입력 새이벤트 콤보입력이 없으면 플레이종료
2번 째 애니메이션
|--------|---------------------|---------|-------------|
이벤트 넘어옴 여기서 다음콤보입력 새이벤트 콤보입력이 없으면 플레이종료
3번 째 애니메이션
|--------|---------------------|---------|-------------|
이벤트 넘어옴 여기서 다음콤보입력 새이벤트 콤보입력이 없으면 플레이종료
1) 콤보를 할 첫 번째 애니메이션, 두 번째 애니메이션, 세 번째 애니메이션을 다운받는다. (믹사모)
※주의 : 이 때 애니메이션이 끝날 때 플레이어의 위치가 변하면(애니메이션 시작 할 때의 기존 위치로 안 돌아오고 앞으로 간다던가 하면) 콤보 구현이 힘들기 때문에, 애니메이션이 끝날 때 정위치로 돌아가는 애니메이션으로 다운받는다.
2) 첫 번째 콤보(공격) 애니메이션에 다음 콤보를 입력받을 이벤트 두 개와 빠져나가는 이벤트 하나를 만든다.
이 것을 2, 3번째 콤보에도 동일하게 적용해준다.
3) 해당 이벤트에 대한 함수를 만들어준다
1
2
3
4
|
// 콤보구현
private bool bComboExist;
private bool bComboEnable; // 콤보가 가능한지
private int comboIndex;
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
private void Combo_Enable()
{
bComboEnable = true;
}
private void Combo_Disable()
{
bComboEnable = false;
}
private void Combo_Exist()
{
if (bComboExist == false)
return;
bComboExist = false;
}
|
cs |
4) 애니메이션 베이스 레이어에 마우스 오른쪽 버튼 -> Create Sub-State Machine을 클릭하여 Sword_Combo라는이름으로 추가한다
이렇게 베이스 레이어에 생성된다
5) Parameters에서 다음 콤보로 넘어가는 Trigger "NextCombo" 를 추가 해준다.
Sword_Combo를 더블 클릭하여 들어가서 내가 넣고 싶은 콤보들 1, 2, 3을 애니메이션에 추가해주고 Make Transition으로 조건을 걸어준다.
저렇게 빨간 화살표로 표시 한 부분은 모든 동작(3개)에서 다음 콤보가 없을 때 언제든지 돌아와야 할 동작으로 돌아올 수 있게 조건을 만들어 준 것이다.
저 부분은 세 동작 다 Has Exit Time으로 돌아간다
6) 저렇게 화살표 표시한 부분들은 다음 콤보가 이어졌을 때 (NextCombo Trigger일 때), 다음 콤보로 동작을 바꿀 수 있도록 Has Exit Time을 제거하고 Conditions에 NextCombo Trigger을 넣는다.
7) 애니메이션 이벤트 스크립트에 필요한 조건식들을 적어준다.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
private bool bAttacking; // // 콤보가 가능한지
// 콤보구역
private bool bComboExist;
private bool bComboEnable; // 콤보가 가능한지
private int comboIndex;
#region Sword_Attack
private void UpdateAttacking()
{
if (Input.GetButtonDown("Attack") == false)
return;
if (bEquipped == false)
return;
if (bComboEnable) // 입력이 되면 가능, 없으면 무시
{
bComboEnable = false;
bComboExist = true;
return;
}
if (bAttacking == true)
return;
movement.Stop();
bAttacking = true;
animator.SetBool("IsAttacking", bAttacking);
}
private void Combo_Enable()
{
bComboEnable = true;
}
private void Combo_Disable()
{
bComboEnable = false;
}
private void Combo_Exist()
{
if (bComboExist == false)
return;
bComboExist = false;
comboIndex++;
animator.SetTrigger("NextCombo");
}
private void End_Attack()
{
movement.Move();
bAttacking = false;
animator.SetBool("IsAttacking", bAttacking);
comboIndex = 0; // 콤보 마무리
}
|
cs |
실행을 눌러보고 플레이를 해 보면 저렇게 콤보가 이어져 실행되는 모습을 볼 수 있다.
출처 및 참고: 강의 짱잘하시는 울 유니티 선생님 수업

HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)