22강에서는 Enemy 세팅을 다룰 예정이다.
1. Enemy Animation 세팅
2. 적과 충돌 검출
1. Enemy Animation 세팅
1) ABP Enemy 다 삭제 > ABP Player 이벤트 그래프 복사, 붙여넣기
(Ctrl 키로 연속 선택 가능)
2) 자료형 BP_Enemy "Enemy" 변수생성 밑 Player 대신으로 교체해주기.
3) Valid 에서 Speed, Direction 값 가져오는 것 제외하고 다 삭제 및 핀 제거
4) mixamo 애니메이션 가져오기
--1) great sword idle, run FRLB 다운로드 > without skin > in place
--2) 컴파일 후 언리얼로 가져와서 애님인스턴스 생성
--3) "BlendSpaces" 폴더 > 애니메이션 > 블랜드 스페이스 > Skel Mannequin > BS_GreatSword 생성
다음과 같이 설정 후
- 0일때 idle
- 양 끝에 Back
- 가운데 순서대로 Left, Forword, Right 설정
--4) ABP_Enemy 에서 BS_Sword > BS_GreatSword 변경
5) Enemy 캐릭터 이동속도 보정
BP_Enemy > CharacterMovement > Max Walk Speed 400으로 변경
6) Enemy 애니메이션 넣기, 컴파일 후 애님 프리뷰에디터에서 체크
7) BP_Enemy 의 Begin Play 이벤트를 다음과 같이 업데이트 해 플레이 시 무기를 장착하도록 했다.
2. 적과 충돌 검출
전투 시스템의 "타격" 을 구현하기 위해서는 무기에 충돌체를 넣어 주어야 한다.
무기에 충돌체를 자식으로 넣고, 같이 움직이게 끔 구현할 예정이다.
1) 충돌체 만들기
충돌체 종류 : Box, Capsule, Sphere
* 일반적으로 Capsule 을 제일 많이 씀
2) 충돌체 값 조정
무기의 경우 손으로 무기를 잡았을 경우에도 충돌이 일어나기 때문에 손잡이에는 충돌체를 놓지 않음
3) 충돌 설정
콜리전 프리셋 : Pawn 을 사용해도 문제가 되지 않지만 이후에 확장성을 위해서 "OverlapAllDynamic" 으로 설정
* 충돌 중 캐릭터만 골라내서 처리가능, 벽 등 충돌 검출이 필요할 때 확장 가능
Generate Overlap Events : 필수 체크
* Overlap Event 가 충돌체 양쪽 모두 켜져 있는 경우에만 충돌 이벤트가 발생
(현재 캐릭터는 Overlap 이 켜져있어 충돌이 되며, 벽은 Overlap이 켜져 있지 않아 충돌이 되지 않는다.)
4) 무기 이벤트 그래프 설정 (1/2)
On Component Begin Overlap
- Overlapped Component : 자기 컴퍼넌트
- Other Actor : 충돌된놈
- Other Comp : 충돌된놈
위와 같이 세팅을 마치면, 플레이어의 무기가 충돌체와 닿았을 경우, Sword 의 Owner와 같이 않을경우에 Other Actor 의 Name이 출력됨.
5) 무기 이벤트 그래프 설정 (2/2)
4번까지 진행하였을 경우의 오류 : 플레이어가 피격을 하지 않았음에도 접근시 충돌 처리가 됨
이러한 문제는 플레이어의 공격여부를 검사하여 충돌체를 켜고 끄는 방식으로 해결이 가능
위와 같이 게임 시작과 동시에 "No Collision" 으로 초기화 시켜준다.
* No Collision : 충돌검사 수행하지 않음
이제 충돌기능이 늘 꺼져있는데 충돌 기능을 Nofity 를 통해 켜고, 끄는 것을 구현할 것이다.
6) Anim Notify State 설정
--1) Anim Notify State 블루프린트 생성 > "ANS_CollisionSword" > Nofity name - "ColisionSword"
--2) Begin 함수 오버라이드 설정
* Sword 안에 capsule(충돌체) 가 있음
* Collision Enabled (Query and Physics) 로 설정, 겹침 다 허용 후 검출 해서 사용
--3) End 함수 오버라이드 사용
Begin 함수 복사 후 "Set Collision Enabled" 의 "No Collision"만 변경, 충돌 처리 비활성화
(Tick 함수 오버라이드 : 중간에 처리할 사항이 없으니 다루지 않음)
< Anim Notify State >
함수 오버라이더블 :
- Begin 노티파이 구간 시작
- Tick 노티파이 중
- End 노티파이 완료
7) 애님 몽타주 > Notify State 추가 > "Collision Sword"
플레이어가 공격을 시작할 즈음에 아래와 같이 구간 설정
* Notify 줄 수는 무수히 추가해도 상관없다, 작업에서 확인이 편리하니 사용할 수록 좋음
이러한 과정을 통해 적 피격처리가 온전히 끝났다.
무기에 단순히 닿는다고 피격처리가 되는 것이 아니라, 플레이어가 무기를 차고 공격 애니메이션을 실행 할 때 피격 처리가 된다.
* 심화과정으로 들어가면 아직 완전한 해결책으로 볼수는 없다.
적은확률로 특정 상황에서 여러번 피격하는 처리가 생길 수 있는데 추후 배열을 만들어 충돌처리가 된 Actor를 등록하고, 데미지를 넣을때 배열에 이미 등록되어있는 Actor 인지를 검사해서 이미 등록되어 있으면 데미지를 주지 않고 등록이 안되어 있는 물체라는 데미지를 주는 방법을 통해 1회 공격당 1번의 데미지 처리가 될 수 있게끔 더 높은 수준의 구현을 할 수도 있다. (이후 C++을 사용해서 진행할 예정)
이로써 한 파트의 강의가 마무리 되었는데, 다음 시간에는 "Damaged Enemy" 등 적 피격에 대해서 더 심도있게 다뤄볼 예정이다. 한차시 쉬면서 지금까지 한 작업물들을 기록할 예정인데, 앞으로 이어나갈 강의가 기대가 된다.
'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글
[24강] Damaged Enemy - 2 (1) | 2024.06.06 |
---|---|
[23강] Damaged Enemy - 1 (1) | 2024.05.15 |
[21강] Animation Blending (0) | 2023.10.12 |
[20강] Animation Montage (2) | 2023.10.12 |
[19강] Spawn Actor & AttachToComponent (1) | 2023.10.06 |