프로젝트PF - 기본 공격(콤보) (3)

지용현·2023년 9월 18일

프로젝트PF

목록 보기
20/30
post-thumbnail

1. 계획

bMove체크에 따른 공격시 움직임 제한 추가
AnimMontage 재생 시 발 움직임에 맞춰서 앞으로 이동하도록 구현
공격발동시 캐릭터의 Rotation을 컨트롤러의 Rotation 에 맞춰서 회전하도록 하기 ( 내가 보는 방향으로 공격 발동 )
저번 글의 6번 다음 할것을 구현하기

2. 설계

캐릭터에 bCanMove 변수를 추가 하고 Move함수에 체크하는 조건문을 만들어서 움직임을 제한한다.
캐릭터에 MoveForward함수를 만들고 AnimNotifyState의 Tick을 사용해서 발 움직임에 맞춰 캐릭터를 앞으로 이동시킨다.
마우스 클릭시 호출되는 DoAttack, 콤보 시 발동하는 Begin_DoAttack에 Control Rotation에 맞춰서 캐릭터 회전시키기

3. 구현

  1. bMove체크에 따른 공격시 움직임 제한 추가

캐릭터에 bCanMove변수 추가, Setter Getter 함수 추가

Move 축 입력에서 bCanMove 검사 추가

DoAttack 함수에서 DataAsset의 CanMove 데이터에 따라 SetbCanMove 하기

  1. AnimMontage 재생 시 발 움직임에 맞춰서 앞으로 이동하도록 구현

캐릭터에 MoveForwardXY 함수 추가, 스피드 입력받아서 속도 조절 가능

AnimNotifyState MoveForwardXY에 Tick을 사용하여 캐릭터의 MoveForwardXY호출

AnimMontage에서 발 움직임에 맞춰서 알맞게 조절

  1. 공격발동시 캐릭터의 Rotation을 컨트롤러의 Rotation 에 맞춰서 회전하도록 하기

캐릭터에 BaseAimRotation의 Yaw만 가져와서 Actor의 RotationYaw에 적용하는 함수 추가

공격 함수에서 호출

4. 결과

공격중에 이동 입력이 불가능하고, 발 움직임에 맞춰서 앞으로 나아가며 컨트롤러가 보는 방향으로 회전도 하지만 문제가 발생했다.

5. 문제 발생

Move함수에서 bCanMove를 검사해서 입력을 무시하도록 구현했음에도 방향키를 연타하면 State가 다시 재검사되면서 Idle로 바뀌어버린다. 그래서 마우스를 동시에 연타하면 공격모션이 끊기고 계속 새로 진행된다.

위의 결과 움짤에서도 보이듯이 카메라 방향으로 캐릭터를 회전시킬 때 1프레임정도 화면이 튄다.

6. 문제 해결

첫번째 문제는 StateCheck함수에서 Attacking 상태 일 시 State를 갱신하지 않도록 하였다.

두번째 문제가 큰 문제인데 해결방법을 모르겠다.

여러 실험을 해본결과

마우스 클릭으로 호출되는 DoAttack함수에서의 회전 호출에대해선 문제없이 잘 되었으나
AnimNotify로 호출되는 Begin_DoAttack에 있는 회전 호출에서 문제가 발생한다.

7. 다음 할것

AnimNotify 에서 호출되는 회전 안튀게 수정하기
캐릭터의 무언가를 변경하는 함수들 캐릭터에 모으고, 관련된 함수끼리 묶어서 Actor Component로 묶어 관리하기위해 리팩토링하기
SphereTrace나 각종 Trace를 쉽게 쓰기 위해 BlueprintFunctionLibrary같은 함수모음 만들기

profile
게임 개발자 지망생

0개의 댓글