새로운 스킬(FireStorm) 만들기
BP_Skill의 자손 블루프린트로 BP_FireStorm을 만들었다.
새로 스킬을 추가하였기 때문에, BP_Player의 SkillClasses에 두번째 스킬로 BP_FireStorm을 추가해줬다.
BP_FireStorm
ParticleSystem(FireStorm)과 CapsuleCollision 컴포넌트 두 개를 추가해줬다.
FireStorm은 이름 그대로 Particle에 fireStorm을 추가해주면 된다.
Capsule은 충돌을 위해 추가해준 것으로, 다단히트로 데미지를 입히는 방식이 될 예정이다.
FireStorm 파티클의 크기에 맞춰서 Capsule의 크기도 지정해주었다.
* 위치 z : 300.0 / CapsuleHalfHegiht : 500.0 / CapsuleRadius : 200.0
FireStorm 스킬을 사용하면 FireStorm이 캐릭터 주위를 도는 형식의 스킬이 될 것이다.
캐릭터에서 300 정도에 떨어진 거리에서 초당 180도의 속력으로 돈다고 하자.
이 부분에서 삼각함수와 벡터를 활용하게 된다.
플로트 변수로 Distance(거리) / AngularSpeed(회전속도) / Angle(현재 각도) 3개를 추가해주었다.
따라서 Distance는 300, AngularSpeed는 180, Angle은 비워두었다.
(Angle 변수만 빼고 Distance와 AngularSpeed는 수정할 필요가 없기 때문에 블루프린트 읽기 전용으로 설정해주었다)
1. 백터의 방향 잡기
다음으로 먼저 Vector를 만들어주었다. Make Vector를 추가하여 x, y에 각각 COSd(코사인), SINd(사인)를 연결해주었다.
* COS, SIN 뒤에 d는 반환값이 degree라는 뜻이다. 원래는 Radian을 반환한다.
2. 크기 설정
백터의 방향을 잡아준 뒤, 크기(Distance)를 곱해주어 크기 설정을 해준다.
3. 위치 설정
그리고 캐릭터의 Location을 받아와서 더해주면, 캐릭터에서 300 크기정도 떨어진 정면에서 FireStorm이 생성되게 된다.
FireStorm을 움직일 때, Root 컴포넌트를 움직여도 되지만, 지금은 Particle(FireStorm)과 Capsule을 움직여보도록 하겠다.
여러번 움직여줄 필요를 없애기 위해 FireStorm 컴포넌트 자식으로 Capsule 컴포넌트를 넣어주었다.
그리고 FireStorm에서 SetWorldLocation을 꺼내 위에서 계산한 Location을 넣어주면 된다.
* WorldLocation으로 한 이유는 월드 상의 위치로 회전시켜줄 것이기 때문이다.
이제 Tick 이벤트 호출 마다 각도(Angle)을 계산해줄 것인데, 정리를 위해 시퀀스를 하나 추가하여 만들었다.
Get World Delta Seconds(Tick 이벤트의 DeltaSeconds와 같음) * AngularSpeed를 곱한 값에 Angle를 더하여 저장해준다.
Math 표현식(수학 표현식)
위 로직처럼 매우 긴 수학식을 압축하여 간단하게 표현해줄 수 있는 방법이 바로 Math 표현식이다.
이렇게 수학 표현식으로 대체하여 사용할 수도 있다.
하지만 수학 표현식은 내부에서 수학적인 연산만 가능하여, = 과 같은 대입 또는 GetWorlDeltaSeconds같은 함수를 직접 받아올 수 없기 때문에 값을 따로 받아와주거나 넣어주면 된다.
위와 같이 직접 외부에서 DeltaSeconds를 받아와주고, 나오는 결과값은 Angle에 직접 Set 해주면 된다.
RotateVectorAroundAxis
특정 축(Axis)를 기준으로 각도(AngleDeg)와 벡터(In Vect)를 제공하면 회전하는 벡터를 제공하는 함수가 있다.
Axis 중에 중심으로 회전할 축에 1.0의 값을 넣어주면 해당 축을 기준으로 잘 회전한다.
사실상 우리가 만들었던 위의 수학 표현식과 같은 것이라고
보면 된다.
그래서 이렇게 교체해도 잘만 돌아간다.
'언리얼엔진' 카테고리의 다른 글
37. Dot, Cross Product / 삼각함수 atan2 (0) | 2023.06.27 |
---|---|
36. SetTimerbyEvent / 이벤트 생성 (0) | 2023.06.25 |
34. Sword Trail / Teleport Effect / Camera Lag (0) | 2023.06.22 |
33. 텔레포트 이동 / 무기 공격 이펙트(Trail / Effect) (0) | 2023.06.20 |
32. 캐릭터 스킬 로직 / 텔레포트 / 스킬 애니메이션 (0) | 2023.06.20 |