[UE5] 이득우 Part 2. 6강 캐릭터 공격 판정

공부 스파이럴·2024년 1월 25일
0

캐릭터 액션의 충돌 판정

  • 월드가 제공하는 충돌 판정 서비스를 사용
  • 월드는 크게 세 가지의 충돌 판정 서비스를 제공함
    • LineTrace
      • 지정한 방향으로 선을 투사해서 물체 충돌 파악
    • Sweep
      • 지정한 방향으로 도형을 투사해서 물체 충돌 감지
    • Overlap
      • 지정한 영역에 큰 범위의 도형을 설정해서 해당 볼륨 영역과 물체가 충돌하는지 검사
  • 월드 내 배치된 충돌체와 충돌하는지 파악하고, 충돌한 액터 정보를 얻을 수 있음

트레이스 채널과 충돌 프로필 생성

  • 액션 판정을 위한 트레이스 채널의 생성 : ABAction. 기본 반응은 무시
  • 캐릭터 캡슐용 프로필 : ABAction 트레이스 채널에 반응. 오브젝트 타입은 Pawn
  • 스켈레탈 메시용 프로필 : 랙돌 구현을 위해 주로 활용
  • 기믹 트리거용 프로필 : 폰 캡슐에만 반응하도록 설정. 오브젝트 타입은 WorldStatic

실습

  • 트레이스 채널이 내부적으로는 열거형 값을 사용
    • 열거형 값을 사용하는 것이 더 편리
  • 이벤트 발생 -> 노티파이 이용
    • 노티파이 클래스 이름은 AnimNotify_{이름} 식으로 지음
    • 몽타주 각 위치에 노티파이 추가
  • 노티파이 함수를 구현
    • 액터에 명령
      -> 캐릭터를 바로 사용하는 경우 캐릭터에 대한 헤더를 추가 해줘야 함
      -> 의존성이 생김
      -> 범용적으로 사용하려면 인터페이스 구현하는 것이 좋음

월드 트레이싱 함수의 선택

  • 세가지 카테고리로 원하는 함수 이름을 얻을 수 있음
    • {처리방법}{대상}{처리설정}
  • 처리 방법
    • LineTrace / Sweep / Overlap 중 하나
  • 대상
    • Test : 무언가 감지되었는지를 테스트
    • Single 또는 AnyTest : 감지된 단일 물체 정보를 반환
      • LineTrace와 Sweep의 경우에는 Single
      • Overlap은 AnyTest
    • Multi : 감지된 모든 물체 정보를 배열로 반환
  • 처리 설정
    • ByChannel : 채널 정보를 사용해 감지
    • ByObjectType : 물체에 지정된 물리 타입 정보를 사용해 감지
    • ByProfile : 프로필 정보를 사용해 감지

캐릭터 공격 판정 구현

  • 캐릭터의 위치에서 시선 방향으로 물체가 있는지 감지
  • 작은 구체를 제작하고 시선 방향으로 특정 거리까지만 투사
  • 하나의 물체만 감지
  • 트레이스 채널을 사용해 감지

-> {Sweep}{Single}{ByChannel}

실습

  • Physics란 폴더를 만들고 Collision을 위한 헤더를 추가
    • 전처리기
  • SweepSingleByChannel
    • GetWorld()를 통해 호출
    • 투사 시작, 끝지점을 지정
    • 구체 영역은 FCollisionShape::MakeSphere 를 통해서 지정 가능
    • 채널 지정
    • 파라미터들
      • 태그 : 충돌을 분석할 때 식별자 정보
      • 컴플렉스 : 단순한 충돌체인지 아닌지
        -> 복잡한 충돌체는 올라서기만 가능
      • 무시할 액터

  • 디버그 드로잉 함수를 사용해 물리 충돌을 시각적으로 테스트

  • 액터의 TakeDamage를 사용해서 데미지 전달

  • 델리게이트와 람다함수를 활용해서 죽은 npc 삭제

0개의 댓글