UE4 Chapter 5-5. 보스 AI : 버그 수정

Date:     Updated:

카테고리:

태그:

인프런에 있는 황대희님의 언리얼 엔진4 3D 횡스크롤 게임 만들기 강의를 듣고 정리한 필기입니다. 😀
언리얼 엔진 공식 문서 https://docs.unrealengine.com/ko/index.html

🔔 스테이지 1 몬스터 및 보스 배치

Alt키 누른채로 드래그하여 이동시키면 해당 위치로 복사 됨.


🔔 버그 수정

적들이 서로 공격이 되는 것 막기

몬스터와 보스가 플레이어에게 공격을 시도하면서 다른 몬스터들에게 데미지를 가할 수도 있다. 각자 태그를 달아, 특정 태그만 공격을 하도록 하자

🚩 “MoveCharBP” 블루프린트 이벤트 그래프

image

자기 자신을 나타내는 “MoveCharBP”(self)를 클릭한 상태에서 디테일 패널에서 Actor - Tags 에서 “PlayerHero” 이름의 원소를 추가한다.

🚩 “DefaultMosterBP” 블루프린트 이벤트 그래프

마찬가지로 자기 자신을 나타내는 “DefaultMosterBP”(self)를 클릭한 상태에서 디테일 패널에서 Actor - Tags 에서 “Monster” 이름의 원소를 추가한다.

🚩 “Boss1MosterBP” 블루프린트 이벤트 그래프

마찬가지로 자기 자신을 나타내는 “Boss1MosterBP”(self)를 클릭한 상태에서 디테일 패널에서 Actor - Tags 에서 “Monster” 이름의 원소를 추가한다.


🚩 “MoveCharBP” 블루프린트 이벤트 그래프, “DefaultMosterBP” 블루프린트 이벤트 그래프, “Boss1MosterBP” 블루프린트 이벤트 그래프

image

자기 자신(액터)의 태그 배열의 첫번째 원소와, 충돌한 액터의 태그 배열의 첫번째 원소를 검사하여 다를 경우에만 데미지를 입힌다. 즉 자기 자신과 같은 태그일 땐 데미지를 적용하지 않는다. 몬스터들과 보스는 “Monster” 태그를 가지고 있으므로 서로에게 데미지가 들어가지 않는다. 플레이어, 몬스터, 보스 블루프린트 모두에게 적용한다. 보스 같은 경우에는 스킬 공격(On Component Begin Overlap (Capsule)), 기본 공격(On Component Begin Overlap (Sphere)) 둘 다 추가해주자.


몬스터, 보스가 공격시 플레이어 방향 쪽으로 회전하도록

공격을 개시하는 부분에 앞서 플레이어를 향해 회전하도록 해주면 된다.

🚩 “DefaultMosterBP” 블루프린트 이벤트 그래프

image

image

공격 하기 전에 먼저 플레이어가 있는 방향(DirToPlayerCharacter)으로 회전한다.(Set Rotation) 이 사이의 중간 노드는 형 변환노드다. 벡터를 쿼터니언으로 자동 형변환 해줌.

  • 몬스터 블루프린트 같은 경우에는, 공격을 다시 개시하는 부분이 OnAnimEndAttack 이벤트에 있다. 알맞은 위치에 삽입해준다.

🚩 “Boss1MosterBP” 블루프린트 이벤트 그래프

image

  • 보스 블루프린트 같은 경우에는, 공격을 개시하는 부분이 StartAttack 이벤트에 있다. 알맞은 위치에 삽입해준다. 스킬, 일반 공격 둘 다 개시하기 전에 회전할 수 있도록 해준다.


점프 자연스럽게

🚩 “shield_and_sword_jump_MonTage” 플레이어의 점프 애님 몽타주

image

플레이어가 점프할 때 점프 애니메이션이 끝나면 걷기 애니메이션으로 돌아가기 때문에 점프 중에도 걷는 모션이 살짝 나와 어색했었다. 이를 방지하기 위해 점프 애니메이션의 거의 끝자락에 무한 반복될 섹션을 추가하여 점프 애니메이션이 끝나지 않게 하였다.


Tag 배열 런타임 에러

🚩 “MoveCharBP” 블루프린트 이벤트 그래프

image

  • 자신의 액터 태그 배열에 “PlayerHero” 원소가 있고(and) 충돌한 액터의 태그 배열도 “PlayerHero” 원소가 있다면 데미지 처리를 하지 않는다.
  • 충돌한 액터의 컴포넌트의 태그 배열에 “Character” 원소가 있는 경우에만 데미지 처리를 한다.

🚩 “DefaultMosterBP” 블루프린트 이벤트 그래프, “Boss1MosterBP” 블루프린트 이벤트 그래프

image

  • 자신의 액터 태그 배열에 “Monster” 원소가 있고(and) 충돌한 액터의 태그 배열도 “Monster” 원소가 있다면 데미지 처리를 하지 않는다.
  • 충돌한 액터의 컴포넌트의 태그 배열에 “Character” 원소가 있는 경우에만 데미지 처리를 한다.

기존에는 아래와 같이 충돌 처리가 일어나는 순간마다 배열에 접근해 원소를 Get 해오려 했었다. 그러나 칼을 휘두르는 그 충돌 처리가 다른 맵 오브젝트나 바닥에 닿거나 자기 자신의 몸에 닿거나 등등, 꼭 보스와 몬스터 그리고 플레이어 사이에서만 이루어지는 것은 아니기 때문에 공격을 시도할 때마다 런타임 오류 로그가 출력 되었었다. 배열 길이가 0 일 때 원소를 Get 하려는 경우가 있을 수 있기 때문이었다. 따라서 배열에 원소가 존재하는 경우에만 처리될 수 있도록 위와 같이 바꿔주었다.

image



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

UE4 Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기