본문 바로가기

언리얼엔진

39. FireBall 발사 / ProjectileMovement 컴포넌트

BP_FireBall 스킬 사용

BP_FireBall의 Get Destination Data 함수

LineTraceForObjects에서 Branch를 통해서 충돌 여부를 구분하여 Break Hit Result에서 충돌했을 때에는 Location을,

충돌하지 않았다면 TraceEnd를 반환해주었다.

 

마찬가지로 PlayerController 형변환에 실패 시에도 반환 노드를 추가


스킬 몽타주(Wizard_Attack_Montage)가 실행되고 중간에 넣어둔 Notify가 호출되는 시점이 FireBall이 날아갈 시점이므로

BP_FireBall 이벤트에서 End Action A 이벤트를 추가해주었다.

BP_FireBall의 이벤트그래프


FireBall이 나가는 위치를 잡아주기 위해 캐릭터의 bone(hand_r)의 위치를 가져와서 SpawnActorFromClass의 Location에

연결해주었다.

SpawnActor의 Location에 연결


Projectile 만들기

이어서 SpawnActor에서 스폰해줄 클래스 BP_FireBallProjectile(블루프린트 클래스 Actor)을 생성해주었다.

BP_FireBallProjectile 내에서 ParticleSystem과 Sphere Collision을 추가해주었다.

 

ParticleSystem

ㄴTemplate : P_Shot_Fire

ㄴ스케일 : 0.5

ㄴ회전 z : -90 (월드 기준 x와 방향을 맞추기 위함)

 

Sphere(Root Component로 올림)

ㄴSphere Radius : 20.0

 

ProjectileMovement

틱이 도는동안 다른 컴포넌트의 위치를 업데이트해준다. 충돌 후 튕김이나 유도 미사일 같은 작동 방식을 지원해준다.

 

Initial Speed : 생성당시 스피드(5000.0 으로 설정함)

Max Speed : 최대 속력 제한

Rotation Follows Velocity : 날아가는 속도에 따라서 오브젝트의 방향이 회전된다.(사용함)

Rotation Remains Vertical : Pitch 회전이 적용되지 않음. xy축에 대한 회전은 되지만 z축에 대한 회전 적용 안됨

Inital Velocity in Local Space : 초기 속력이 Local Space에 대해서 계산될지의 여부(Local X or World X / 사용함)

Projectile Gravity Scale : 중력 적용 여부

 

Should Bounce : 튕겨져나가는 투사체

Bounce Angle Affects Friction : 튕기면서 마찰이 적용될 것인지 여부

Bounce Velocity Stop Simulating Threshold : 튕긴 후 속도가 해당 값 이하일 경우 종료

 

Force Sub Stepping : 프레임 당 이동을 더 잘게 나눌 수 있다. 중력의 영향을 받거나 호밍기능이 있는 경우 사용

    * Sweep은 곡선을 처리하긴 어렵다. 따라서 포물선의 경우 이러한 기능 사용

 

Is Homing Projectile : 투사체의 유도 여부

    * Projectile Movement - Set Homing Target Component를 통해서 충돌 대상 지정 가능

Homing Acceleration Magnitude : 호밍 타겟을 향해 가속할 때 가속량 증폭


BP_FireBallProjectile의 이벤트그래프

이어서 BP_FireBall에 돌아와 SpawnActorFromClass의 Class에 방금 만든 BP_FireBallProjectile을 지정해준다.

 

Spawn Rotation을 잡아주기 위하여 Find Look at Rotation을 사용하였는데, Start와 Target의 Location만 가져오면

해당 방향에 맞춘 회전값을 내보내줄 수 있다.

따라서 Start는 소켓으로 받아온 hand_r의 Location이며, Target은 Get Destination Data 함수의 결과로 나온 Location을

넣어주었다.

 

이후 실행해보면 FireBall이 잘 생성되면서 LineTrace를 그린 방향대로 잘 날아가는 것을 볼 수 있다.