- 에셋 추가 (맵 에셋 / AI 에셋)
- 애니매이션 생성 ( 걷기 / 공격)
- 피격 로직 추가(KnockBack)
- 맵 에셋 추가(Subway Station)
-> Subway는 추후 추가- 기본 애니매이션과 호환되는 Monster 에셋 (Zombie) 적용
-> AttackMontage 연결
- AI Anim 기본 동작 실행 영상
- 추후 추가 작업 집어넣을 예정(넉백 / 공격 모션 추가 / 사망 )
- Player가 공격을 하면 몬스터가 넉백을 하는 걸 만드는 목표.
1) TaskNode로 KnockBack 코드를 작성
2) NonPlayCharacter에 KnockBack에 관련된 코드를 작성
-> 공격때와 마찬가지로 AnimMontage를 이용해서 과정을 처리할 계획.
3) BT를 작성
-> IsHit bool값을 BB에 만들어서 맞을 때와 맞지 않았을 때를 가르기.
적용해보니 이런 오류가 뜬다..
그래서 오류대로 적용을 해봤는데 공격을 하고 눕기는 하나 이동을 안한다...RootComp->AddImpulse(KnockbackImpulse, NAME_None, true);->이게 문제였던것 같음
- 물리 시뮬레이션을 RootComp가 활성화 하지 않아서.. 그래서 적용을 하고 실행을 해봤더니 오류 메세지는 뜨지 않았으나 몬스터가 나뒹굼
LaunchCharacter(KnockbackImpulse, false, false);ACharacter 클래스는 물리 기반이 아니라 CharacterMovementComponent로 움직임을 처리 하기에
물리 시뮬레이션을 사용하지 않는 LaunchCharacter()를 사용해, 내부적으로 캐릭터의 이동 속도를 직접 변경해서 넉백을 구현하는 방식으로 수정.
-> 정상적으로 작동은 하나 Montage를 적용하니 디버그가 걸림.
- 오류 메세지를 확인하니 OnKnockBackMontageEnded 함수가 델리게이트에 바인딩되지 못하는 문제
에러 로그에 "function might not be marked as a UFUNCTION" 라고 나옴
-> UFUNCTION 매크로를 확인하고, 델리게이트 바인딩 방식을 수정해야 한다고 함.UFUNCTION() void OnKnockBackMontageEnded(UAnimMontage* Montage, bool bInterrupted);-> UFUNCTION()으로 감싸줬음. 델리게이트에 바인딩할 수 없어서 발생하는 오류를 해결하기 위함.
드디어 정상 작동...