Unreal Engine/게임클래스 - 언리얼엔진 기초

[51강] Wizard Skill (Throw) - 1

whereareyoung 2024. 9. 23. 23:55

이번시간에는 Warp 스킬 구현에 있던 버그를 해결 한 후 Throw 스킬을 구현할 예정이다. 

 

버그 해결 

원인 파악 : Flase 구간 처리가 없기 때문에 발생  

어떤 동작이 끝나면 Montage 를 통해 Attack End 가 발행해서 End Spell 로 들어오는데, False 에서 끊어져 버리면 Attack End 가 발생할 수 없음. BP_Wizard 에서 Spell 에서 Idel 로 돌려주어야 하는데 이 부분이 막혀서 버그가 생기는 것이다.

 

해결법 : False 일때 1) Idel 로 돌려주기, 2) CanMove를 다시 True로 만들어 주는 작업 

 

BP_WizardSkill_Warp > 이벤트그래프 > 다음과 같이 세팅 

위와 같이 처리하면 이동불가능한 위치를 클릭하였다가 다시 Warp 를 수행해도 잘 작동한다. 

 

던지는 마법은 Throw 구현 

- ThrowItem은 Projectile(투사체) 를 가지고 움직이며 해당 객체를 Spawn 시켜서 사용할 것이기 때문에 Throw 에서 어떤 종류로 Spawn 시킬 것인가를 결정

- 자료형을 가지도록 작업을 해줘야 해서 Throw 가 조금 더 복잡한 스킬 구현

 

1. 기초작업

1) 콘텐츠 > BP_FireBall 삭제 

 

2)Wizard > BP_WizardSkill_Heal 복제하여 "BP_WizardSkill_Throw" 생성 

 

2. BP_ThrowItems 세팅 

1) Wizard > "ThrowItems" 폴더 생성, 블루프린트 클래스 > Actor > "BP_ThrowItem" 생성 

 

2) BP_ThrowItem > 이벤트 그래프 > Float 형 "Power" 변수 생성 및 다음과 같이 세팅 

* Set Life Spawn : 일정 시간 뒤에 자동으로 제거되도록 해주는 함수

 

< 현재 상태 정리 > 

- ThrowItem > Throw 

- Throw 부모는 WizardSkill, owner 는 Wizard 

 

3) BP_ThrowItem > "GetOwnerToThrow" 함수생성, 다음과 같이 세팅, 퓨어 체크

 

4) BP_ThrowItem > "GetOwnerToWizard" 함수생성, Wizard 을 구해올 수 있도록 다음과 같이 세팅, 퓨어체크

 

5) 뷰포트 > 컴포넌트 다음과 같이 세팅 

- Sphere Collision 추가, Rename "Collision"

- Collision 밑에 그래픽을 위해 ParticleSystem 추가 

- ProjectileMovement 추가 

* Projectile : 투사체를 관리하는 컴포넌트 (ActorComponent) 

Actor 컴포넌트라 자식으로 들어갈 수 없음 

 

ParticleSystem > P_FireBall 넣어주기 

 

- ProjectileMovement > 다음과 같이 세팅 

 

이후 자식들도 다 상속받아서 바꿔주기만 하면 됨 아이스볼은 아이스로 등등 

필요한 부분은 재정의 하면됨 

 

6) BP_ThrowItem > "BeginOverlap" 함수 생성 및 다음과 같이 세팅

자식들은 전부다 던지는 거는 다 똑같이 데미지를 가진 형태가 되어 있음 

부모에다 공격을 정의해놓으면 자식이 가져다 쓸 수 있음 

- OtherActor : 부딫히는 애 

- Explosion : 부딫히는 효과 

- .

Location : 부딫힌 위치 보정값 

 

 

* Particle Component 와 Particle System 은 다름, 다음과 같이 템플릿 안에 들어 있는건 System 이다 

 

3. BP_ThrowItem_FireBall 세팅 

1) BP_ThrowItem > 자손 블루프린트 클래스 생성 > "BP_ThrowItem_FireBall" 생성

 

2) BP_ThrowItem_FireBall > 이벤트 그래프, 부모 BeginPlay 를 해야 Set Life Spawn 받을 수 있어 두고 다음과 같이 세팅 

- BeginPlay 이벤트

 

- On Component Begin Overlap

 

* "On Component Begin Overlap" 의 경우 다음에서 편하게 추가 가능 

 

4. BP_ThrowItem > Begin Overlap 다음과 같이 편집

* 함수일때는 안에 있는 변수들 지역변수로 쓸 수 있음 

 

5. BP_Weapon > Send Damage 다음과 같이 세팅

- 캐릭터에 맞으면 폭발

 

- 캐릭터에 맞지 않으면 폭발 안시킴 

함수니까 실행핀이 안나와서 무조건 반환 1개로 나와서 Result 로 처리했는데 핀갈라서 매크로 처리 원하면 가능하다. 

 

6. BP_ThrowItem > Begin Overlap > Send Damage 에 다음과 같이 Result 가 생겼는데, 다음시간에 이제 이 이후로 던지는 거 이어서 진행 예정이다 

 

오늘도 재미있고 유익했다!

다음시간에 Part 3 이 끝나는데, 어떻게 마무리가 될 지 다음 시간이 기대가 된다.