[Unreal_블루프린트]#25_Fist Attack 구현, 맨손 공격
Unreal 블루프린트 개발 중 "맨손 공격" 구현에 대해 알아보겠습니다.
"블루 프린트" 활용에 대한 내용입니다.
ABP_Player, 애니메이션 블루프린트
* 액션 매핑 추가 관련 내용은 생략하겠습니다.
1. Blend Space 생성 및 구현
가로축 + 세로축 세팅은 이전과 같습니다.
2. Anim Graph 상태 기계 추가
Fist 상태 기계 설정도 이전과 같습니다.
3. Combat Type 열거형 멤버 추가
새로운 상태로 "Fist" 상태를 추가합니다.
4. Blend Pose By ECombat Type
1. Fist 상태 기계의 Cache Pose 생성
2. Blend Pose By ECombatType
Socket
1. Skeleton에 Socket 추가
1. Hand_R + Hand_L 하위의 적절한 본에 각각 소켓을 추가합니다 -> Fist_Righthand + Fist_Lefthand
2. ball_R + ball _L 본에 각각 소켓을 추가합니다 -> Fist_Rightfoot + Fist_Leftfoot
BP_Fist
1. BP_Combo를 상속하는 BP_Fist 생성
클래스 세팅을 통해 Parent Class를 BP_Combo로 설정합니다.
2. Sphere Collision 컴포넌트 추가
3. BP_Combo의 변수 값 설정
BP_Combo에서 상속받은 변수들을 BP_Fist의 특성에 맞게 설정해줍니다.
* Combo Table은 Fist 관련 애님 몽타주들의 정보를 담고 있는 데이터 테이블입니다.
3. Attach To Socket 함수 선언 및 정의
1. Sphere Collision 타입 + Socket Name
Attach To Socket 함수는 2개의 인자를 받습니다. 특정 Sphere Collision 유형과 Attach 할 Socket 이름을 인자로 합니다.
2. Attach Component To Component
특정 컴포넌트를 Parent 컴포넌트의 특정 Socket 이름에 Atttach 합니다.
4. BP_Combo 에서 선언하는 OnCollision + OffCollision 커스텀 이벤트
1. OnCollision(Collision Enabled를 켜주는 커스텀 이벤트)
2. OffCollision(Collision Enabled를 꺼주는 커스텀 이벤트)
* 상세 구현은 하위 클래스 BP_Fist에서 해줍니다.
5. Set Collision 함수 선언 및 정의
1. ECollisionEnabled 유형의 Collision Type 입력 값
ECollisionEnabled 타입의 값을 가져옵니다. Collision Type을 정할 수 있는 열거형입니다.
2. Get Components By Class
주어진 클래스에서 상속받는 컴포넌트를 모두 가져옵니다.
6. OnCollision + OffCollision 커스텀 이벤트 상세 구현
간단하게 BP_Fist에서 선언한 SetCollision 함수를 호출하고, Collision 타입을 전달합니다.
* 그렇다면, On Collision과 Off Collision 커스텀 이벤트를 직접 호출해줄 Notify State가 필요하겠죠.
7. On Component Begin Overlap 충돌 이벤트 구현
1. Send Damage
별도로 설정한 Power 값을 Damage 값으로 BP_Weapon에서 정의한 Send Damage 함수를 호출해줘야죠!
AN_Collision
1. Received Notify Begin + Received Notify End 수정
1. Get Weapon Current
BPI_Weapon에서 선언하고 BP_Player에서 정의한 Get Weapon Current는 현재 Weapon, 즉 Combat Type을 반환합니다.
2. Cast To BP_Combo
BP_Combo의 하위 클래스, 즉 BP_Sword + BP_Fist 만 Collision 관련 노티파이 스테이트를 필요로 하기 때문에 현재 Weapon을 BP_Combo로 캐스팅하여 성공하면 Collision 관련 함수를 호출해줍니다. 당연하게도, BP_Wizard 같은 NoCombo 공격 방식은 별도의 호출이 필요 없습니다.
3. On Collision + Off Collision 호출
Notify State 구간의 Begin 시점에 On Collision을 호출하고, End 시점에 Off Collision을 호출해줍니다.
Fist 애님 에셋
1. 애님 몽타주 생성 및 Notify + Notify State 추가
앞서 설명한 것과 동일한 방식으로 진행합니다!
2. Slot을 Full Body로 설정
상/하체 분리를 통해 재생하는 애님 몽타주들이 아니기 때문에, Full Body로 설정합니다.
3. BP_Combo::Play Combo Montage
Combo Table 정보를 로딩하여 각 Montage를 재생하는 함수는 BP_Combo에서 구현하고 있죠!!
* 상세 내용은 이전의 Sword와 동일하므로, 생략
BP_Player
1. BeginPlay이벤트에서 Spawn & Attach Fist 노드 그룹 구현
Sword와 동일합니다. 단지 Sword처럼 Weapon Holster에 장착 중인 무기가 아니므로, 시작 시점에 Spawn 하는 경우 별도의 Socket 이름 없이 BP_Player 인스턴스의 Mesh 컴포넌트에 직접 Attach만 해줍니다.
2. Attacking Fist Event 구현
Sword 혹은 Wizard Event의 것과 다름없지만, 새로운 Combat Type이 추가된 만큼 서로 간의 전환 방식을 구현하는 Switch Node에 대한 추가 구현이 이루어져야겠죠!
* 당연히 Sword Event와 Wizard Event 내부에서도 추가 구현이 필요하죠!
AN_Unequipped, Combat Type 간 전환
1. AN_Unequipped 수정
Sword 공격 모드를 끝내고 BP_Sword를 Weapon Holster 소켓에 다시 집어넣고 호출되는 해당 노티파이는 Sword -> Fist 공격 모드 간 전환을 위해 추가 구현이 필요하죠!
'게임개발 > Unreal 블루프린트' 카테고리의 다른 글
[Unreal_블루프린트]#27_Targeting (0) | 2022.09.27 |
---|---|
[Unreal_블루프린트]#26_Rolling + Backstep (0) | 2022.09.27 |
[Unreal_블루프린트]#24_Skill UI (0) | 2022.09.26 |
[Unreal_블루프린트]#23_Weapon Change, Scroll 액션 이벤트 (0) | 2022.09.26 |
[Unreal_블루프린트]#22_Wizard Skills (1) | 2022.09.26 |