프로그래밍 공부
작성일
2024. 2. 6. 14:47
작성자
WDmil
728x90

이제 마법에 관한 애니메이션을 전부 적용하였으니, 공격을 하였을 때, 마법이 발사되고, 마법이 충돌하면 폭발하는 과정을 전부 블루프린트로 구현해보자.


Wizard FireBall 만들기

 

우선, 공격시에 손에 들 고 있던 마법을 발사해야 한다.

이런경우 손에 있는 객체를 발사하는 것 보다는. 그 객체를 꺼버리고 그 위치에서 발사체 객체를 생성하고 발사하는것 이 더 효율적이고 코드도 쉽게 작성된다.

 

손에있는걸 던졌을 때 는 손에 있는 객체를 꺼버린 뒤에, 새로 생성하면 눈으로 볼 때는 그 손에 있는 객체가 발사된것 처럼 보일 것 이다.

Actor로 새로운 객체를 생성해보자.

손에 있던 FireBall 과는 다른 객체를 생성한다.

이 블루프린트는 생성된 뒤에 정면으로 발사되게 만들 것 이다.

FIreBall은 구체 형태의 Collision을 가지고, 파티클 시스템을 독자적으로 사용한다.

그리고, 객체를 자동으로 발사하게 만들기 위한,

 

ProjectileMovement를 생성한다. 이 컴포넌트는 객체 스스로를 생성된 뒤 자동으로 일정 위치를 향하게 이동시킨다.

발사체 설정은 위와 같다. 기본적으로, 속도를 1500정도로 설정하고, 시간가속을 적용하여 최대 1700까지 속도가 상승하도록 할 수 있다.

 

중력은 설정하지 않았다. 필요에 따라 중력을 설정할 수 있을 것 이다.

 

여기에 발사체 속도에 ulog형 가속을 붙여놓으면, 처음에는 느렸다가 일정 속도 이상에서는 급격하게 빨라지도록 정의할 수도 있다.


BP_FireBall 이벤트 그래프

Tick이벤트 이다. 생성 후 LifeSpan을 설정한다. 생성후에 5초간의 시간제한 후 스스로 소멸하게 한다.

충돌 시 발생할 상황을 정의해준다.

 

임의의 객체와 충돌 시에 해당 객체의 Apply Damage를 설정하고, 해당 Damage를 실행시키면서, 필요한 함수들을 전달해 준다.

 

이 객체의 Has는 발사한 주체를 정의한다. BP_Player에서 설정해줄 것 이다.

 

충돌 직후, FireBall의 위치에 폭발을 발생시키고, 해당 폭발은 언제나 발사한 객체를 마주보게 해주면 좀더 이팩트가 잘 보일 것 이다.

 

이렇게 이펙트를 정의하고, 충돌한 파이어볼은 Destory를 통해 없애준다.


FireBall 발사하기

 

이제, 투사체에 대한 정의는 전부 끝났다. 투사체를 BP_Player에서 발사해보자.

커스텀 이벤트를 만들어서 Throw_FireBall이라고 정의한다.

Mesh의 소켓은 있던 소켓을 사용해도 무방하고, 있던 소켓이 아니라 따로 사이즈를 정의해주고 싶다면, 새로운 소켓을 정의해줘도 무방하다.

 

Transform에는 방향정보도 정의되어야 함으로, Location에 현재 ActorRotation을 정의해준다.

그리하여, 현재  Actor가 이미 카메라를 기준으로 XY축 회전을 하기 때문에 자연스럽게 파이어볼을 던지게 된다.

 

이와같은 Transform을 정의하고, BP_Fire_Ball을 생성하면 그대로 자연스럽게 공격이 날아간다.

 

생성뒤에는 바로 Set을 통해 Has를 발사한 자기자신으로 정의해준다.

 

그리고, 발사되었으니 손에 있던 FireBall은 꺼준다.


FireBall 노티파이 만들기

 

이 커스텀 이벤트를 노티파이를 통해 작동시킬 것 이다.

노티파이를 정의한다.

여기에서 ThrowFireBall을 통해 실행시켜준다.

 

공격이 종료되면, FIreBall을 다시 켜주어야 한다. 그래야 다음 공격을 발사할 수 있을 것 이다.

Attack_Event의 EndWizardAttack에 켜주는 블루프린트를 추가한다.

 

그리고 노티파이를 추가해주면 된다.

이제 공격시에 알아서, 파이어볼을 던지고, 손의 불을 끄며, 공격종료시에 파이어볼이 켜질 것 이다.

 

또한, 파이어볼이 임의의 물체와 충돌하면 터질 것 이다.


테스트

 


피격객체 태우기

 

이제 공격을 맞은 BP_Enemy를 불에 태워보자.

 

BP_Enemy로 이동하고, 해당 BP_Enemy에서 파티클 시스템을 추가한다.

 

파티클 시스템에서 불타는 이펙트를 추가하고,

Auto Activate를 False로 바꾸어준 후에

공격방식이 FireBall일 경우에만 켜줄 것 이다.

 

여기에서 공격타입을 받아온 뒤에, 공격타입이 불 형태라면 불타게 만들 수도 있다.

 

충돌시에 검사하는 항목에서 받아올 수 있으니, 현재 적용하는 형태에서 개선할 수 있을 것 이다.

그러나 이번에는 형변환을 통해 검출할 것 이다.

 

DamageEvent로 이동하여, 변수 한개를 정의해주자.

Set을 통해 데미지를 준 주체를 받아온다.

여기에서 BP_Sword에 형변환을 해보고, 실패하면 FireBall에도 형변환을 시도한 뒤에, 맞다면, 몸에 붙어있는 불을 켜주고, 5초뒤에 꺼준다.

 


테스트

 

 

728x90