Unreal Engine/게임클래스 - 언리얼엔진 기초

[22강] Enemy

whereareyoung 2023. 10. 13. 14:53

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