UE4 Chapter 3-8. 플레이어 캐릭터 : 공격 충돌 처리

Date:     Updated:

카테고리:

태그:

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

공격 충돌 처리

캐릭터의 칼에 충돌을 감지 할 수 있는 Collision을 달아서 향후 데미지 처리 같은 것을 할 수 있도로 하자.

🔔 칼에 Collision(충돌체) 붙이기

🚩 “MoveCharBP”의 블루프린트 에디터

  • “MoveCharBP”의 컴포넌트 추가 👉 Capsule Collision 선택
    • 이를 “MoveCharBP”의 Mesh 하위에 넣어준다.
    • 노란색 캡슐이 바로 방금 추가한 Capsule Collision이다.
      • image

🚩 “MoveCharBP”의 블루프린트의 디테일 패널

칼의 뼈대에 이 Capsule Collision을 붙여주어야 한다.

  • Capsule 컴포넌트 선택
    • 소켓 - 부모 소켓 - Right Hand 해주면 오른 손에 Capsule Collision가 붙게 된다. 오른 손 뼈대에 붙어서 이제 오른손 뼈대의 애니메이션을 따라다니게 된다.트랜스폼 값을 조정하여 아래와 같이 만들었다.
      • image
  • Capsule Collision을 세밀하게 칼에 붙여주어야 하기 때문에 편리하게 하기 위하여 애니메이션을 잠시 꺼두도록 하자.
    • Mesh 컴포넌트 선택
      • Animation - Animtation Mode - Use Animation Asset
    • Capsule Collision 컴포넌트 선택
      • 스냅 버튼 끄고 회전, 크기, 위치를 칼에 알맞게 세밀하게 조정해보자.
        • image
    • Mesh 컴포넌트 선택 👉 애니메이션 다시 키기
      • Animation - Animtation Mode - Use Animation Blueprint


🔔 Collision 설정

🚩 “MoveCharBP”의 블루프린트의 디테일 패널. Capsule 선택.

image

  • 칼이 튕겨나가지 않고 관통되도록 모두 겹침(Overlap)으로 설정해주었다.
    • 무시 👉 충돌 처리가 되지 않는다.
    • 겹침 👉 충돌 처리가 되긴 하나 물리적으로 충돌하는 효과가 발생하지 않고 관통한다.
    • 블록 👉 충돌 처리도 되며 물리적으로 충돌하는 효과가 발생한다.


🔔 충돌 처리 이벤트

🚩 “MoveCharBP”의 블루프린트의 디테일 패널. Capsule 선택.

image

“MoveCharBP”의 Capsule Collision 컴포넌트를 선택한 상태에서 디테일 패널의 Event 에서 On Component Begin Overlap 이벤트를 +를 눌러 이벤트 그래프에 추가해주자.


자기 자신과는 충돌 처리를 하지 않게끔

자기 자신이 붙어 있는 “MoveCharBP” 캐릭터(액터) 자체에도 Collision이 붙어 있기 때문에 애니메이션이 이루어 지면서 칼의 Collision이 “MoveCharBP”의 Collision과 충돌하는 경우가 생긴다. 칼의 충돌 처리에선 자기 자신인 “MoveCharBP”과의 충돌은 제외해야 한다.

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

image

  • On Component Begin Overlap
    • 해당 컴포넌트(칼에 붙어있는 Capsule)에 어떤 액터가 닿아서 충돌이 일어났을 때 자동으로 실행되는 이벤트
    • Other Actor 👉 충돌한 액터가 리턴된다.
  • self
    • 자기 자신 액터 (“MoveCharBP”)
  • Get Display Name
    • 입력 받은 오브젝트의 이름을 string으로 리턴한다.
  • Print String
    • 입력 받은 string을 화면에 출력한다.
  • 충돌한 오브젝트가 자기 자신(“MoveCharBP”)이 아닐 경우에만(Branch False) Print String 노드를 실행한다.

image

실험을 해보기 위해 하얀 큐브를 추가했다. 큐브에 “CollisionTestBP”라는 이름의 블루프린트를 추가했고 충돌 처리가 일어나도록 하기 위하여 블루프린트 에디터에서 Box Collision을 추가해 준 상태다. 큐브와 충돌하자 큐브의 이름이 잘 출력되는 것을 볼 수 있다. 자기 자신은 “MoveCharBP”은 출력되지 않는다.


공격 애니메이션이 동작할 때만 충돌 처리를 하게끔

공격 애니메이션 중에서 칼을 휘두르기 시작하는 애니메이션을 재생할 즈음에 노티파이로 이벤트를 발생시킨다. 이 이벤트가 발생했을 때만 충돌 처리가 이루어지게끔 한다. 공격 애니메이션이 동작할 때만 충돌 처리가 이루어지도록 하기 위해서! 그리고 칼을 다 휘두른 즈음에는 이제 충돌 처리가 이루어지지 않게끔 막아야 한다.

🚩 “sword_and_shield_slash_Montage” 몽타주 (공격 애니메이션 몽타주)

image

  • OnCollStart_Attack
    • 👉 칼을 휘두르기 시작할 즈음 발생하는 이벤트
    • 이때 칼의 충돌 처리가 허용되게 할 것이다.
  • OnCollEnd_Attack
    • 👉 칼을 휘두르는 애니메이션이 끝나갈 때 즈음 발생하는 이벤트
    • 이때 칼의 충돌 처리를 막아둘 것이다.
  • 몽타주의 노티파이 이벤트들은 '애니메이션 블루프린트'에서만 직접적으로 받을 수 있다
    • 애니메이션 블루프린트에서 이 이벤트를 감지하고 이를 “MoveCharBP”의 커스텀 이벤트인 OnCollStart_Attack, OnCollEnd_Attack가 발생 하도록 전해주어야 한다.
      • “MoveCharBP”의 OnCollStart_Attack와 몽타주에서 노티파이 한 OnCollStart_Attack은 별개의 이벤트임. 이름이 같을 뿐.
      • 이 둘의 중재를 몽타주 노티파이 이벤트를 직접 받을 수 있는 애니메이션 블루프린트에서 해야함.

🚩 “MoveCharBP”의 이벤트 그래프

image

  • 커스텀 이벤트 두개를 만들고 이름을 각각 OnCollStart_Attack, OnCollEnd_Attack로 설정

🚩 “CharAnimBP”(애니메이션 블루프린트)의 이벤트 그래프

image

  • 노티파이에 추가했던 그 이벤트 OnCollStart_Attack이 발생하면 “MoveCharBP”의 OnCollStart_Attack 이벤트를 호출한다.
  • 노티파이에 추가했던 그 이벤트 OnCollEnd_Attack이 발생하면 “MoveCharBP”의 OnCollEnd_Attack 이벤트를 호출한다.

🚩 “MoveCharBP”의 이벤트 그래프

image

*커스텀 이벤트 OnCollStart_Attack가 발생하면 Collision 컴포넌트가 Enable 되고, 커스텀 이벤트 OnCollEnd_Attack가 발생하면 Collision 컴포넌트가 Disable 되게 한다. Capsule은 현재 붙어 있는 Collision Capsule을 드래그 해온 것이다.

image

Capsule을 클릭한 후 디테일 패널에서 Collision의 디폴트 상태는 “No Collision”으로 해주자. 칼 휘두를 때만 Collision을 enable 시킬 거라서.

image

cf) 이 배경 맵에 충돌 Collider가 붙어있는 Triger 어쩌고..인 오브젝트들이 있어서 삭제해주었다.


칼에 닿은 물체는 삭제되도록 하기

🚩 “MoveCharBP”의 이벤트 그래프

image

  • 실행 핀 와이어의 흐름
    • 충돌이 발생했고 (On Component Begin Overlap 👉 Branch)
    • 충돌한 오브젝트가 자기 자신인 “MoveCharBP”가 아니라면 충돌한 그 물체(Ohter Actor)를 삭제하고 (Branch 👉 DestroyActor)
    • 충돌한 물체(Other Actor)의 이름을 화면에 출력한다. (DestroyActor 👉 PrintString)


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

맨 위로 이동하기

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

댓글 남기기