🚀 ProjectileMovement (발사체 무브먼트 컴포넌트)
Projectile Movement 컴포넌트는 루트 액터에 존재하는 충돌체를 움직이고 싶은 경우 사용할 수 있다. (충돌체만 움직일 수 있다.)
언리얼 문서에서는 Tick 이벤트가 호출되는 동안 다른 컴포넌트의 위치를 업데이트해주어 충돌 후 튕김이나 미사일같은 작동 방식을 구현할 수 있다고 적혀있다.
주로 해당 컴포넌트가 움직이는 충돌체는 소유 액터의 루트 구성요소이지만 다른 구성요소를 선택할수도 있다.
컴포넌트의 많은 기능 중 사용할법한 몇 기능만 설명하겠다.
- Projectile
- Initial Speed : 최초 속도
- Max Speed : 가속 시킬 경우 최대 속도 (가속이 없다면 0)
- Projectile Gravity Scale: 값이 1이면 일반적인 중력값(9.8)이고 0이면 중력의 영향을 받지 않는다. - Projectile Bounces
- 던지면 튕기는 기능 - Homing(유도)
- Is Homing Projectile : 활성화 시 객체를 따라감 - Velocity
- Initial Speed에 곱해져서 이동할 방향을 생성한다. - Activation - Auto Active
- 컴포넌트 생성 시 바로 활성화 할지, 혹은 명시적으로 활성화를 해줘야 하는지의 여부
🔥 ProjectileMovement 사용
나는 플레이어의 마법볼을 카메라의 Forward 방향으로 던져버리는 스킬 기능을 구현하는 데 Projectile Movement 컴포넌트를 사용하였다.
먼저, 스킬 액션값을 입력하면 투사체(FireBall)를 던질 방향 벡터를 초기화 하였다. 이때 투사체는 캐릭터의 전방방향이 아닌, 카메라의 전방방향으로 나가도록 구현하였다.
(개어렵네 무슨말이야)
character 액터의 카메라 컴포넌트가 있다면 카메라 컴포넌트의 Forward 벡터를 추출한 후, x축을 기준으로 한 Rotator를 생성한다. 이후 Yaw 회전 하며 Forward 방향만 맞추면 되기 때문에 Roll, Pitch 회전을 제외한 Rotator를 다시 생성하고, 마지막으로 생성된 Rotator대로 액터의 Forward 벡터를 회전시킨 후, Direction 변수에 해당 벡터를 저장하였다.
투사체가 발사될 Direction이 모두 구해졌다면, 투사체를 플레이어의 손 위치에 맞도록 Transform을 설정한 후, 커스텀 함수인 Shoot을 호출하며 Direction을 전달하였다.
Shoot 이벤트에서는 In Direction 입력값으로 받아온 방향벡터에 Projectile Movement에서 설정한 초기 속도를 곱하여 Velocity를 설정하였고, 이후 Projectile Movement를 이용해 투사체의 Active를 활성화시켜주었다.
최종적으로 FireBall을 카메라의 전방방향으로 던지는 공격 기능을 완성하였다.
참조
UProjectileMovementComponent
ProjectileMovementComponent updates the position of another component during its tick.
docs.unrealengine.com