[Unreal_블루프린트]#22_Wizard Skills

2022. 9. 26. 11:20· 게임개발/Unreal 블루프린트
목차
  1.  
  2. [Unreal_블루프린트]#22_Wizard Skills

 

[Unreal_블루프린트]#22_Wizard Skills

Unreal 블루프린트 개발 중 "Wizard Skills"에 대해 알아보겠습니다.

"블루 프린트" 활용에 대한 내용입니다.

 

 


상속 모델

상속 모델 디자인

 

Heal

1. BP_WizardSkill_Heal

BP_WizardSkill_Heal

클래스 세팅을 통해 Parent Class를 "BP_WizardSkill"로 설정합니다.

 

2. BP_WizardSkill::Spell 구현

BP_WizardSkill_Heal 에서 상세 구현한 BP_WizardSkill::Spell 커스텀 이벤트

1. BPI_Weapon::SetCanMove

"BPI_Weapon" 인터페이스에서 제공하고 "BP_Player"에서 상세 구현을 진행했던 "Set Can Move"를 호출합니다.

2. BP_Player의 애님 몽타주 재생

"BP_WizardSkill"에서 제공하는 "GetOwner To Wizard"를 통해 "BP_Player"를 얻어오고 Play Anim Montage 이벤트를 호출합니다.

 

3. BP_WizardSkill::EndSpell 상세 구현

BP_WizardSkill_Heal에서 구현한 "BP_WizardSkill"의 EndSpell 커스텀 이벤트

1. SetCanMove

위와 동일합니다.

2. BP_Weapon::Increase Health

"BPI_Weapon"에서 제공하고 "BP_Player"에서 상세 구현을 진행한 "Increase Health" 함수를 호출합니다. 증가시킬 Health Point는 별도로 변수를 생성해줍니다. 

 

Warp, 순간 이동

1. BP_WizardSkill_Warp

BP_WizardSkill_Warp

Heal과 마찬가지로 클래스 세팅을 통해 Parent Calss를 "BP_WizardSkill"로 설정합니다.

 

2. Decal 컴포넌트 추가

BP_WizardSkill_Warp의 Decal Component 추가 화면

* Decal?

Decal은 Mesh 표면에 렌더링되는 Material로 월드 화면에 그려내는 스티커라고 보면됩니다!

 

3. Get Cursor Location 메크로 생성 및 구현

BP_WizardSkill_Warp 내부 Get Cursor Location 메크로 구현 화면

1. Get Hit Result Under Cursor For Objects

Unreal이 제공하는 함수로 마우스 커서가 위치하는 곳의 "Hit Result(구조체)"를 반환합니다. 

2. Break Hit Result

위  "Get Hit Result..."와 짝을 이루며 "HitResult" 구조체 내부 정보를 개별적으로 반환해주는 역할을 합니다.

 

4. BeginPlay 이벤트 구현

BP_WizardSkill_Warp의 BeginPlay이벤트 구현 화면

1. On Cursor Location

우리가 조종하는 마우스 커서의 위치의 정보를 반환합니다. 보통 Pawn에 붙어있는 Camera Component와 Mouse 커서 등은 AController 타입입니다!

2. On Cursor Location -> Hit Actor

마우스 커서가 위치한 지점에 Hit이 발생한 Actor 정보를 가져옵니다. 간단한 Warp만 진행할 예정이므로, "Wall"일 경우에만 "Set Visibility"를 통해 화면에 렌더하도록 합니다!

3. Set World Location

"Set Visibility"를 통해 화면에 렌더하는 동시에 Decal Component의 World 위치를 지정해줍니다!

* 맥락은 Cursor 위치 "Wall" Actor 라면 Decal을 화면에 렌더하고, 그렇지 않으면 렌더하지 않습니다.

 

5. Spell 구현

BP_WizardSkill_Warp의 BP_WizardSkill::Spell 상세 구현

1. BP_WizardSkill::Spell 이벤트

Heal과 마찬가지로 BP_WizardSkill에서 제공하는 Spell 이벤트를 정의합니다.

2. Get Cursor Location -> Location

Spell 호출을 통해 Decal 이 가리키는 위치로 이동하기 위해서 "Location" 정보가 필요합니다. 따라서, 개별적으로 "Location(Vector 타입)" 변수를 생성해 Get Cursor Location이 반환하는 위치 정보를 저장해둡니다.

3. SetCanMove

Heal과 동일합니다. "BP_Player"의 CanMove 변수를 "False"로 변경하고 움직이지 못하도록 합니다.

* 맥락은 마우스 커서 위치 정보를 저장, 몽타주를 재생합니다.

 

6. EndSpell 구현

BP_WizardSkill_Warp의 "BP_WizardSkill::EndSpell"을 상세 구현

1. Set Can Move

Heal 과 동일합니다.

2. Set Actor Location

"Spell" 커스텀 이벤트 호출에서 저장한 Cursor 위치 정보를 통해 "BP_Player"의 위치를 변경합니다.

 

Throw, 투적 마법 스킬

1. BP_WizardSkill_Throw

BP_WizardSkill_Throw 화면

역시, 클래스 세팅을 통해 Parent Class를 "BP_WizardSkill"로 설정합니다.

 

2. Particle 컴포넌트 추가

BP_WizardSkill_Throw

Particle System 컴포넌트를 추가하고 Particle Template을 미리 지정해두지 않습니다. 다양한 투척 스킬을 구현할 예정이라서, 추후에 이벤트 그래프를 통해 구현할 예정입니다. 예를 들면, "Fireball"을 "Throw Item"으로 지정하면 Particle Tempalte을 "P_HandFireball"로 지정하고, "Iceball"을 "Throw Item"일 경우 Particle Template을 "P_HandIceball"로 지정합니다.

 

2. BeginPlay 구현

BP_WizardSkill_Throw의 BeginPlay 이벤트

1. Set Active

간단하게, 시작과 동시에 Particle System의 활성화를 꺼줍니다.

 

3. OnFocus + OffFocus 이벤트 구현

BP_WizardSkill_Throw의 "BP_WizardSkill::OnFocus"

1. BP_WizardSkill::OnFocus

앞서 BP_WizardSkill에서 선언한 OnFocus 커스텀 호출은 Particle System을 활성화 시킵니다.

2. BP_WizardSkill::OffFocus

위와 반대로 Particle System을 비 활성화 시킵니다.

 

4. Spell 이벤트 구현

BP_WizardSkill_Throw의 BP_WizardSkill::Spell 커스텀 이벤트 구현

1. Set Can Move

Heal 그리고 Warp와 동일합니다.

2. Play Anim Montage

Heal 그리고 Warp와 동일합니다.

 

5. EndSpell 구현

BP_WizardSkill_Throw의 "BP_WizardSkill::EndSpell"

 

6. Throw 커스텀 이벤트 생성 및 구현

BP_WizardSkill_Throw::Throw 커스텀 이벤트 구현

1. Spawn Actor By Class

추후에 구현할 "Change Item" 함수를 통해 얻어온 Throw Item (투척 종류, eg) Fireball, Iceball)을 특정 위치와 회전 값을 통해 Spawn합니다. 이때, Spawn할 Actor는 "Projectile Movemnt" 컴포넌트를 갖고 있어야합니다. 그렇지 않으면, 움직이지 않겠죠...ㅎㅎ

2. Throw Items 배열
FThrowItem 구조체 내부
추후에 구현할 Throw Item 구조체를 담고 있는 배열입니다. 미리 설명하자면, Throw Item 구조체는 나중에 구현할 BP_Throw Item 클래스의 참조와 Particle System을 담고 있습니다. 여기서 Particle System은 투척 종류에 따라서 달라지는 손에 들고 있을 Particle System을 의미합니다. 정리하자면, 손에 들고 있을 이펙트와 마법 공격 시 투척할 마법 공격을 구조체에 담고있는것입니다.

 

7. AN_WizardAttack -> AN_WizardThrow 로 변경 및 구현 수정

AN_WizardThrow의 Received Notify 함수 구현 화면

1. Get Weapon Current

BPI_Weapon 인터페이스에서 선언하고, BP_Player 내부에서 오버라이딩한 "Get Weapon Current" 함수는 현재 Player 객체의 Combat Type 상태를 반환합니다.

2. BP_WizardSkill_Throw::Throw 커스텀 이벤트 호출
BP_WizardSkill_Throw의 이벤트 그래프 중 "Throw" 커스텀 이벤트 구현 화면
결과적으로, 현재 "AN_WizardThrow" 노티파이는 BP_WizardSkill_Throw 에서 구현한 Throw 커스텀 이벤트를 호출합니다.

 

8. BP_Fireball 수정 + BP_Iceball 생성

왼쪽부터 BP_Fireball, BP_Iceball의 이벤트 그래프

1. 클래스 세팅 -> Parent Class를 BP_ThrowItem으로 설정

2. Begin Overlap

BeginOverlap(충돌) 함수는 그대로 "On Comoponent Begin Overlap"을 호출하기 보다, 상위 클래스(BP_ThrowItem)에서 생성한 "BeginOverlap"함수에게 필요한 인자들을 전달하는 것으로 구현합니다!

 

9. Change Item 함수

BP_WizardSkill_Throw의 ChangeItem 함수 구현 화면

1. Find Index 로컬 변수 생성

분기 반복문(For Each)을 돌며 새로운 "ThrowItem(투척 종류)"를 찾으면 해당 index를 "FindIndex"로 값으로 설정합니다.

2. Break 조건

입력으로 받은 Throw Item과 같은 Throw Item 구조체를 "Find Index"를 통해 "ThrowItems" 배열에서 찾을 경우 Break합니다.


3. Completed 조건

"Completed" 조건으로 "Find Index" 변수를 "Current(Index)"로 설정합니다. 그리고 "ThrowItems" 배열의 "Current" 인덱스에 해당하는 "ThrowItem" 구조체를 통해 현재 설정할 "Template", 즉 Particle System을 설정합니다. 

 

ThrowItem(Fireball or Iceball)

1. BP_ThrowItem 생성

BP_ThrowItem 블루프린트 에디터 창 화면

 

2. Get Owner To Wizard + Get Owner To Throw 함수 구현

BP_ThrowItem 의 Get Owner To Wizard 함수 + Get Owner To Throw 함수 구현 화면

1. Get Owner To Throw

Owner = BP_WizardSkill_Throw 액터

2. Get Owner To Wizard

BP_WizardSkill_Throw 의 Owner = BP_Wizard

 

3. BeginOverlap(충돌) 함수 구현

BP_WizardSkill_Throw의 BeginOverlap 함수 구현

1. 입력 생성 + Spawn Emitter At Location

BeginOverlap 함수의 입력들은 Spawn Emitter At Location 이벤트, 즉 폭발 Emitter를 Spawn하기 위한 변수들입니다.

2. Send Damage 함수

"BP_Weapon"에서 제공하는 비 가상 메서드 "Send Damage" 함수를 역시 호출해야겠죠

 

Enemy, 피격 구현

1. EventGraph -> Hitted 노드 그룹 추가 구현

BP_Enemy의 Event Graph 중 Hitted Event 추가 구현 화면

1. Cast To BP_Sword로 형 변환

충돌 발생과 함께 "Damage Causer"를 BP_Sword로 형 변환 할 때, 변환이 실패하면 "Damge Causer"가 "BP_Wizard"임을 추론할 수 있습니다. 따라서, Cast Failed 핀을 다시 Cast To BP_Wizard로 연결하여 Wizard 공격에대한 피격 반응을 구현합니다.


2. Set Active

"P_AttachFire" 파티클 시스템을 Active 해줍니다!

 

 

 

'게임개발 > Unreal 블루프린트' 카테고리의 다른 글

[Unreal_블루프린트]#24_Skill UI  (0) 2022.09.26
[Unreal_블루프린트]#23_Weapon Change, Scroll 액션 이벤트  (0) 2022.09.26
[Unreal_블루프린트]#21-2_Interface, No Combo  (1) 2022.09.25
[Unreal_블루프린트]#21-1_Interface, Combo  (0) 2022.09.25
[Unreal_블루프린트]#20_Magical Attack  (0) 2022.09.16
  1.  
  2. [Unreal_블루프린트]#22_Wizard Skills
'게임개발/Unreal 블루프린트' 카테고리의 다른 글
  • [Unreal_블루프린트]#24_Skill UI
  • [Unreal_블루프린트]#23_Weapon Change, Scroll 액션 이벤트
  • [Unreal_블루프린트]#21-2_Interface, No Combo
  • [Unreal_블루프린트]#21-1_Interface, Combo
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • stl
  • 우선순위 큐
  • 디자인 패턴
  • BFS
  • DP
  • Unreal Blueprint
  • 개발
  • C++
  • 정렬
  • programmers
  • Effective C++
  • 트리
  • 최단 경로
  • 그래프
  • dfs
  • 기술 질문
  • set
  • unreal
  • 알고리즘
  • BOJ

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Unreal_블루프린트]#22_Wizard Skills
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.