캐릭터 액션의 충돌 판정
- 월드가 제공하는 충돌 판정 서비스를 사용
- 월드는 크게 세 가지의 충돌 판정 서비스를 제공함
- 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 삭제