기본적인 아이디어는 다음과 같다.
- 총알에 에너지를 설정한 뒤, 충돌한 물체의 Physic Mat에 따라 에너지 손실이 일어나며 에너지 손실이 0 이하가 되면 Destroy Actor 실행
1. 오버랩 이벤트로 감지
지금껏 총알과 스켈레탈 메시간의 데미지 구현은 충돌(Hit) 이벤트로 해두었는데,
Ignore Actor를 이용하여 총알과 충돌한 스켈레탈 메시 양쪽에 설정을 해두어도 충돌 이후에는 더이상 날아가지 않고 허공에 고정되어 있다. 이에 대한 해결법은 아직 모르겠지만 일단 히트 이벤트 대신 오버랩 이벤트로 변경하여 진행하도록 하였다.
오버랩 이벤트를 위해 콜리전 프리셋을 변경하였다.
CustomWeapon의 오브젝트 타입을 WorldDynamic에서 PhysicsBody로 변경하였고, PhysicsBody에 대해 Block으로 되어 있던 것을 Overlap으로 변경하였다.
2. 오버랩 된 액터를 통과하는 중에 경우에 따라 오버랩 이벤트가 여러 번 발생하는 경우가 있다
아직 실제로 확인은 해보지 않았지만, 액터의 피직스 에셋이 여러 컴포넌트로 구성되어 있을 경우 발생하는 것 같다.
일단 임시조치로 다음과 같은 로직으로 구현하였다.
- 총알에 액터 변수(OverlappedActor)를 설정한 뒤, 오버랩 이벤트 발생 시 오버랩 된 액터와 액터 변수를 비교하여 동일한 경우는 무시하고, 다른 경우에는 액터 변수에 오버랩 된 액터를 저장한 뒤 오버랩 이벤트를 시작한다.
이 방법을 통해 오버랩 이벤트는 액터 당 한 번의 오버랩 이벤트만 발생하게 되었고, 총알 관통 시스템 로직이 잘 동작하였다.
다만 우려사항으로 나중에 도탄과 같은 시스템을 구현할 때, 이전에 총알을 맞은 액터가 또다시 총알을 맞았을 경우에는 무시가 될 수도 있다는 점인데 다른 방법이 있는지 고민 중이다.
하지만 도탄이라는 것도 결국 다른 물체(액터)에 맞고 팅겨나가는 것이므로 이 방법으로도 가능할 것 같기는 하다
'언리얼 엔진' 카테고리의 다른 글
[언리얼] 캐릭터와 무기 콜리전 세팅 / 시체산 만들기 (0) | 2022.10.18 |
---|---|
[언리얼] 자신의 무기에 콜리전 발생하지 않게 하기 (0) | 2022.10.18 |
[언리얼] 총알에 맞은 물체의 재질에 따라 파티클 이펙트 다르게 하기 (0) | 2022.10.15 |
[언리얼] 총알이 날아온 방향으로 피가 튀기게 하기 (0) | 2022.10.15 |
[언리얼] TPS 조준 (0) | 2022.10.15 |