프로그래밍 공부
작성일
2024. 2. 5. 14:17
작성자
WDmil
728x90

공격방식을 추가하여 다체롭개 해보자.

기존에 사용하였던, 소드모션의 동작방식을 재활용하여 마법 공격 방식을 추가한다.


입력 액션 설정

공격모션의 시작점인 무기 장착이다.

 

전에 만들었던 Sword의 장착키는 1 이고, Wizard의 장착키는 2로 설정하여 동작시킬 것 이다.

Combat을 참조하여, 현재 Combat에 따라 장착한것이 없을 때는 StartWizardMode를, 칼을 들고 있을 때 는, Sheath Sword를, 아니라면 내가 마법모션 이었을 경우, WizardMode를 종료시킨다.

 

기본 상태에서는 마법모드를 시작하고, 칼을 들고 있을 때는 칼을 넣고 마법을 들어야 할 것 이다.

이러한 과정을 통합하여, 좀 더 자연스럽게, 전환을 실행 -> 전환시에 모션 판별을 하여 코드를 자연스럽게 구성시킬 수 도 있을것이다.

 


WizardEvent 구성

Wizard의 이벤트는 위와 같다.

현재 전투상태 를 마법으로 설정하고 공격모드(카메라설정, 애니메이션 로테이선 설정) 을 정의 한 뒤에, 마법이펙트를 키고 끈다.

마법이팩트 의 생성과 설정은 좀더 뒤에 설명한다.


Attacking Event 설정

전에 만들었던 공격실행을 좀더 다체롭게 바꾼다.

현재 장착무기에 따라 공격모션을 실행할 지 마법공격모션을 실행할 지 정의한다.

 

 EndAttacking은, 콤보의 판별위치 임으로 마법콤보를 넣는것 이 아니라면, 정의하지 않는다.

 

EndWizardAttack 커스텀 이벤트를 정의하여, 해당 이벤트가 실행되면 Idle상태로 전환해서 공격할 수 있게 전환해준다.

 


모션 생성하기

 

마법 공격 모션을 몽타주로 바꾸어, 실행할 수 있게 한다.

 

마법모션을 몽타주로 생성하였다면, 공격종료 이벤트 실행에 대해 정의해준다.

노티파이로 공격 종료에 대해 정의한다.

EndAttack은 위와같이 바꾸어 준다.

공격종료 시에, 현재 모션의 state가 Sword인지, Wizard인지 확인하고, 해당되는 커스텀 이벤트를 실행시켜주는 식이다.

EndWizardAttack은 따로 콤보정의 가 없음으로, Idle로 State를 세팅해주는것 만 정의한다.


마법이팩트 생성

 

이펙트를 생성한다.

손 위에 공격이펙트를 생성해야 함 으로, 마법 그 자체를 무기로 생각하고, Actor를 생성한 뒤 칼을 만들었던 것 처럼 게임 시작 시에 손위치에 위치시킨 뒤 해당 엑터의 인게임생성을 False로 바꾸어주면 된다.

 

 


FireBall Actor생성하기

 

FireBall 자체를 무기라고 생각하고, 손에 스폰하기 위해서는 Actor로 정의해줄 필요가 있다.

Actor를 생성해주자.

Actor의 기본구성은 다음과 같다.

내부에 파티클 시스템을 엑터에 생성하고 밑에 붙여주면 된다.

그리고, 해당 파티클 시스템의 디테일 뷰 에서 파티클을 내가 원하는 FIreBall형태로 씌워주면 된다.


소켓 생성하기.

 

칼과 마찬가지로, 정확히 파이어볼이 위치할 공간의 소켓을 생성해주어야 한다.

이 소켓은 공용으로 사용해도 무방하나, 현 공부에서는 여러개의 소켓을 활용하는 방식으로 진행한다.

 

원래라면, Actor의 위치값을 조정하고, 해당 위치값의 로컬을 손 이라는 소켓으로 정의하는것이 옳을것 이다.

바퀴를 여러번 발명하는 것 보다는 낫다.

스켈레톤에서 소켓을 생성한다.


엑터 생성하기.

 

BP_Player의 BeginPlayEvent로 이동하여 정의한다.

기본 방식은 Sword와 같다. 생성하면서 000위치에 만들고, 위치를 Mesh의 내가 지정한 이름의 소켓으로 바꾼 뒤

ActorHidden을 통해 게임에서 뷰를 꺼버리면 된다.

 

그리고, 캐릭터의 Wizard의 실행 시, Actor를 키고, 종료시 Actor를 끄면 된다.


테스트

728x90