프로그래밍 공부
작성일
2024. 2. 1. 19:23
작성자
WDmil
728x90

언리얼에서 CSV데이터를 활용하여 콤보공격을 구현해보자.

우선, 콤보 공격은 공격 이벤트를 수정해야 함 으로 공격이벤트를 건들이는 블루프린트 노드로 이동한다.

BP_Player->AttackingEvent

우선 추가해야할 변수는 위와 같다.

 

현재 다음 콤보로 넘어가는 과정인지 체크할 bool변수 한개,

현재 콤보공격이 몃번째에 해당하는지 확인하는 float변수 한개

현재 콤보공격이 마지막 콤보인지 확인하는 bool변수 한개(이건 이펙트와 카메리위빙에 사용함)

다음 애니메이션이 콤보공격을 출력하는지 확인하는 bool변수 한개 이다.


콤보공격에 노티파이 추가하기

우선 콤보공격 시에, 현재 공격이 콤보공격에 넘어갈 수 있는지 확인하는 노티파이를 추가할 것 이다.

즉, 노티파이 스테이트 를 사용해서 일점 범위구간 안에 애니메이션이 동작하는 동안, 공격버튼을 누르면 다음 콤보 공격이 나가는 식 이다.

노티파이의 구성은 위와 같다.

 

ENableNextCombo를 통해 현재 구간인지 아닌지 확인하고, Begin에서는 True로 End에서는 False로 변환할 것 이다.


노티파이 모션에 적용하기

 

이제 콤보 공격 모션으로 사용할 모션들의 구간에 이 노티파이와 ENdAttack, 그리고 CollisionSowrd를 넣어주자.

모든 공격 모션의 충돌범위와 공격종료시간이 다르기 때문에 어쩔 수 없다.

 

모든 모션은 몽타주로 새롭게 구성하여 사용한다.

2번째 콤보

 

3번째 콤보


BP에서 모션 적용하기

 

이제 Bp_Player에서 해당되는 공격 모션을 실행하게 할 것 이다.

BP에서 공격 모션을 만들어놓았던 노드로 가서, Attacking의 위치로 이동하자.

위 노드에서 Attacking입력 액션에서 EnableNextCombo를 체크하여, 현재 공격이 콤보공격인지 아닌지 판별한다.

첫 공격이면 False로 갈 것 이고, 공격중에 일정 범위안에서 공격키를 눌렀을 경우, True로 이동할 것 이다.

위와같은 형태로 이어주자.

콤보공격이 한번 이어질 때 마다, SwordComboCount가 1씩 늘어나고, 다음 공격이 콤보인지 체크해준 뒤에, EnableNextCombo를 꺼주어 혹시모를 무한순환을 방지한다.


콤보 공격 재생하기

 

콤보 자체를 구현하는건 생각보다 간단한데,

그냥 EndAttack에서 현재 콤보공격이 진행중인지, 다음 공격이 콤보로 이어져야 하는지 체크하고 재생해주면 된다.

EndAttack에서 콤보로 이어지는지 체크하고 true면 위로 false면 종료이다.

 

False에서는 콤보카운트와 모든 체크여부를 다 디폴트로 돌려준다.

SowrdComboCOunt는 주의한다. 배열범위값을 넘어가면 위험함!


콤보배열 참조하기

우리는 이미 CSV형태로 콤보배열을 받아왔다. 이 배열값을 참조할 것 인데, 현재 콤보에 대해 콤보위치를 참조하고, 해당 위치의 애니메이션을 실행한다. 그 이후에 배열범위를 참조하고 배열값의 사이즈와 현재콤보 위치를 확인해서 마지막공격인지 판별할 수 있다.

 


Play Sowrd Combo Montage

커스텀 펑션을 만들어서 관리한다.

위와같은 구조로, 현재 콤보 위치를 참조한 뒤, 해당 참조된 몽타주를 재생하는 방식으로 이루어진다. 


테스트


이펙트&카메라위빙 추가하기

 

이제 마지막 콤보공격이 적중했을 때 카메라의 떨림과 이펙트를 적용할 것 이다.

카메라 위빙과 콤보공격의 적중 여부에 따라 재생하는 것은 마지막 콤보공격의 몽타주에서 실행한다.


카메라 쉐이크 베이스 생성하기

위와같은 블루프린트를 생성하여 카메라 셰이크를 다룰것 이다.


카메라 셰이크 설정

셰이크 설정은 위와같이 진행한다. 루트셰이크 패턴은 다양하게 있으니, 필요시 에셋을 받아서 사용해도 무방하다.


노티파이 생성

 

이제 카메라가 흔들리는 노티파이를 적용할 것 이다.

노티파이는 위와같이 생성한다.

카메라 위빙을 적용할 Player의 카메라를 참조하고, StartCameraShake를 적용하여, 만들어놓은 카메라 쉐이크를 적용한다.


몽타주에 적용

 

이제 몽타주에 적용한다.

대충 힘이 들어가는 부분에 카메라 쉐이크를 넣어주면 된다.


이펙트 추가

 

이제 BP에서 이벤트를 넣어, 타겟위치에 번개를 치게 할 것 이다.

번게 이펙트는 언리얼 에셋에서 받을 수 있다.


BP에서 이펙트 호출

 

우리는 BP에서 이펙트를 확인할 수 있다.

소유자에서 타겟에 호출할 수도 있고, 타겟에서 공격자한테 받아와 실행할 수도 있다.

 

일단 타겟에서 호출하여 받아오게 해보자.

마지막모션인지의 false와 true는 위에서 정의한다.

 


피격자에서의 호출

 

먼저 BP_Player에 다음과 같은 커스텀 이벤트를 생성한다.

커스텀 이벤트를 통해 재생할 애니메이션을 지정하고, 실행해주면 된다. 

그리고 공격자를 형변환 한 뒤, 콤보 이펙트를 재생해준 뒤, 위치는 자기자신을 기입하면 끝이다.


테스트

728x90