문제 상황
아직 프로토타이핑에 불과하지만, 총탄이 사실적이지 않다는 사실이 신경 쓰여서 약간이나마 수정해보려고 했다. 이에 현재 언리얼 엔진에서 기본적으로 제공하는 Projectile Actor에 부착돼 있는 Projectile Movement Component에 대해 알아봤다.
기능 이해와 테스트
엔진에서 제공하는 Projectile Movement Component는 물리적으로 동작하는 투사체를 다루는 component로 투사체의 속도와 방향, 중력에 의해 받는 영향, 탄성, 마찰, 유도 등을 설정할 수 있는 component다.
가장 먼저 Initial Speed와 Max Speed를 살펴봤다. 언뜻보면 투사체의 속도를 관리하는 값으로 보이는 데 이 둘의 초기값은 0이었으나 투사체는 방향과 속도를 가진 채 정상적으로 동작하고 있었다. Initial Speed와 Max Speed를 확인해 보니 아래와 같은 툴팁이 노출됐다.
툴팁을 확인하면 알 수 있듯이 처음에 이 두 변수의 값이 0으로 설정돼있음에도 정상적으로 동작했던 건 Velocity가 아래와 같이 설정돼 있기 때문이었다.
위에서 확인할 수 있듯이 Initial Speed와 Max Speed는 scala 값이지만, Velocity는 vector 값이다. 위 이미지의 Velocity는 (1200, 0, 0)이라는 vector 값을 가지고 있기에 Initial Speed가 0이었음에도 1200의 속도로 x 방향을 향해 발사됐던 것이다.
그리고, 여기에서 Initial Speed의 툴팁을 보면 알 수 있듯이, 우리가 Initial Speed의 값을 0이 아닌 값으로 설정하는 순간 Velocity 값은 direction인 (1, 0, 0)만을 남게 되고, 여기에 Initial Speed 값이 곱해진 대로 투사체가 발사된다. (이 때문에 Initial Speed 값이 높더라도 Velocity가 (0, 0, 0)이라는 투사체는 스폰 즉시 그 자리에 떨어진다.) 아래는 위의 값대로 테스트한 영상이다.
다음으로는 Initial Velocity in Local Space 설정이다.
해당 값을 false로 설정하면 다음과 같이 World Space를 기준으로 처리되기에 아래와 같이 동작하게 된다.
다음으로는 Bounciness를 살펴봤다.
Bounciness는 Should Bounce를 true로 설정해 투사체가 탄성을 갖게 했을 때, 투사체가 어떤 물체에 부딪혀 튕겨져 나오는 경우 얼마만큼의 속도를 보존할 것인가에 대한 설정이다. 아래는 단순하게 0.5로 설정한 결과다.
마지막으로는 Homing을 살펴봤다.
Homing은 Scene Component를 대상으로 하기에 Homing을 위해서는 Is Homing Projectile을 true로 설정하고, 타겟이 될 오브젝트의 Scene Component를 부착해야 한다.
위의 우측 이미지는 단순히 테스트를 위한 BP고, 실제로는 다양한 상황에 대비하고 리소스를 줄이기 위해 투사체를 관리하는 BP를 하나 만드는 게 좋다는 사실을 알아두자. 아무튼 실제로 동작하는 모습은 아래와 같다.
이렇게 Projectile Movement Component에 대해 살펴봤다.
결과
기본 weapon에는 Bounce나 Homing을 적용할 생각이 없어서 아래와 같이 간단하게 설정했다.
배운 점
- Projectile의 방향과 속도 처리 방식
참고 링크
'개발 > 언리얼' 카테고리의 다른 글
[Blueprint] Timeline (0) | 2024.01.03 |
---|---|
[Blueprint] Enhanced Input Action (0) | 2023.12.30 |
[Blueprint] 데미지 처리와 콜리전 채널 (0) | 2023.12.25 |
[Blueprint] 기묘한 For Loop와 Delay의 관계 (0) | 2023.12.24 |
[RYU Russell, 언리얼 엔진 중급 클래스] 배운 내용 정리 (4) [完] (1) | 2022.08.16 |