[UE] Draw a Bowstring, Parkour
프리러닝으로도 알려진 파쿠르(Parkour)는 점프, 등반, 달리기를 통해 도시 환경을 통과하는 신체 활동이다. 언리얼 엔진은 비디오 게임에서 파쿠르 게임플레이를 만드는 데 필요한 도구와 기능을 제공한다. 파쿠르 동작은 애니메이션 시스템과 물리 엔진을 사용하여 구현할 수 있다.
목차
ABP: Animation Blueprint
AN: Blueprint Class AnimNotify
ANS: Blueprint Class - AnimNotifyState
AO: Aim Offset
BP: Blueprint Class
BS: Blend Space
BF: Blueprint Function Library
CS: Matinee Camera Shake
E: Enum 열거형
DT: Data Table
F: 구조체
I: Blueprint Interface
WB: Widget Bluepprint
UE2212_02
Level - LEVEL ABP_Player BP_GameMode BF_Helper IDamage |
|||
AdvancedMagicFX12 |
Materials | ||
Meshes | |||
Particles | |||
Textures | |||
Character | Animation | Bow | |
Common | |||
Fist | |||
Hammer | |||
Parkour | |||
Sword | |||
Unarmed | |||
Wizard | |||
BlendSpaces | BS_Bow BS_Fist BS_Hammer BS_Sword BS_Unarmed BS_Wizard |
||
Materials |
MaterialLayers |
||
M_UE4Man_Body M_UE4Man_ChestLogo |
|||
Mesh | SK_Mannequin SK_MAnnequin_PhysicsAsset Skel_Mannequin |
||
Montages |
Around | Around_Montage | |
Bow | AR_DrawBow_Montage AR_ShootAndDraw_Montage |
||
Common | HitReaction_Move_Montage HitReaction_Stop_Montage |
||
Fist | Fist_Attack_1_Montage Fist_Attack_2_Montage Fist_Attack_3_Montage Fist_Hitted_Montage |
||
Hammer | Frank_RPG_2Hand_Combo01_1_Montage Frank_RPG_2Hand_Combo01_2_Montage Frank_RPG_2Hand_Combo01_3_Montage Frank_RPG_2Hand_Combo01_4_Montage |
||
Parkour | Run_Climb_Montage | ||
Sword | Draw_Sword_Montage Sword_Attack_1_Montage Sword_Attack_2_Montage Sword_Attack_3_Montage |
||
Warp | Warp_Montage | ||
Enemy_DeadFall_Montage HitReaction_Montage |
|||
Textures | UE4_LOGO_CARD UE4_Mannequin__normals UE4_Mannequin_MAT_MASKA UE4Man_Logo_N |
||
Weapons | Elven Bow | ||
Greate Hammer | |||
Sword |
|||
Component | EStateType MovingComponent StateComponent WeaponComponent FeetComponent TargetComponent |
||
Effects | P_Cube_Mesh_Test P_Genno_Weapon_Lightning_01 |
||
Enemies | BP_Enemy | ||
Environment |
Materials | Textures | |
Meshes | |||
Obstacle | |||
InfinityBladeEffects |
Effects |
FX_Combat_Base | |
FX_Materials | |||
FX_Meshes | |||
FX_Monsters | |||
FX_Textures | |||
FX_Textures_IB | |||
Masters | |||
Materials | M_Mesh M_White_Inst M_Red_Inst M_Green_Inst M_Blue_Inst M_UE4Man_Body_Inst M_UE4Man_ChesLogo_Inst |
||
Meshes | Cone_2 Cube_2 Cylinder_2 Sphere_2 |
||
Notifies | ANS_Equip ANS_Combo ANS_Collision AN_BeginAction AN_EndAction AN_CameraShake |
||
Parkour | EParkourArrowType EParkourType FParkourData ParkourComponent ParkourData |
||
Player | BP_Player FZoomData |
||
Sounds | S_BGM S_HitPunch S_OneHand_Hit |
||
Textures | Crosshair | ||
Weapons |
Around | Around_FireBall Around_FireBall1 Around_IceBall Around_IceBall1 DT_DoAction_Around DT_Equip_Around DT_HitData_Around Skill_Around Weapon_Around |
|
Bow | AO_Aim Curve_Aim DT_DoAction_Bow DT_Equip_Bow DT_HitData_Bow FAimData Skill_Aim Skill_Arrow Weapon_Bow |
||
FireBall | DT_DoAction_FireBall DT_Equip_FireBall DT_HitData_FireBall Skill_FireBall Weapon_FireBall |
||
Fist | Combo_Fist - Blueprint Class Actor Weapon_Combo 상속 CS_Fist DT_DoAction_Fist DT_Equip_Fist DT_HitData_Fist |
||
Hammer | Combo_Fist - Blueprint Class Actor Weapon_Combo 상속 CS_Hammer DT_DoAction_Hammer DT_Equip_Hammer DT_HitData_Hammer |
||
Sword | Combo_Sword - Blueprint Class Actor Weapon_Combo 상속 CS_Sword DT_DoAction_Sword DT_Equip_Sword DT_HitData_Sword |
||
Warp | Weapon_Warp - Blueprint Class Actor Weapon 상속 DT_DoAction_Warp DT_Equip_Warp |
||
EWeaponType FDoActionData FEquipData FHitData Weapon - Blueprint Class Actor Weapon_Combo - Blueprint Class Actor Weapon 상속 M_Weapon Skill |
|||
Widget | WB_CrossHair |
Draw a Bowstring
Skel_Mannequin 소켓 추가
- Hand_R - 우클릭 - 소켓 추가 - Hand_Bow_Right 생성
- 위치 조정: x -13.3, y 6.3, z 0.0
AN_End_BowString 생성
AN_Begin_Action을 복사하여 AN_End_BowString 생성
Get Notify Name
Received_Notify
- Get Component by Class로 Weapon Component를 가지고 온다.
- AN_End_BowString의 경우 가져온 Weapon이 Bow인지 확인해야 한다.
- Weapon을 Weapon_Bow로 형변환하여 Weapon이 Bow인 경우만 통과하도록 만든다.
- AN_Begin_Actor 시점에 발사가 시작되어 BowString(활 시위)을 손에서 놓는다.
- AN_End_BowString은 활 쏘기가 끝났음을 의미한다. 손에 BowString(활 시위)를 다시 붙여준다.
-
- Attach Bow String 체크(True)하여 손에 BowString(활 시위)를 다시 붙여준다.
-
AR_ShootAndDraw_Montage - 노티파이 추가
- 우클릭- 노티파이 추가 - 끝쪽 프레임에 End_BowString 노티파이 추가
- Weapon_Bow에서 생성한 변수 AttachBowString은
- Begin_Action일 때 false
- End_BowString일 때 true
Weapon_Bow 수정 - 활 시위 당기기 구현
Equip
- End_Equip
- Unequip
Actions
- Do Action
- Begin_DoAction
- End_DoAction
Sub Action
- CreateArrow
- OnArrowDestroyed
Event Graph
- Skeletal Mesh: Bone의 위치를 가져올 수 있음. Bone의 셋팅X
- Poseable Mesh: Bone의 위치를 가져올 수 있음. Bone의 셋팅O(Poseable Mesh만 가능)
- 변수 생성: StringName (Name), OriginLocation (Vector), AttachBowString (Boolean)
- AttachBowString: default값을 true로 설정. 손에 Bowstring이 붙은 상태가 default.
- AN_BeginAction일 때 false. 활이 나갈 때 손에서 Bowstring이 떨어진다.
- AN_End_BowString일 때 true. 활 쏘기가 끝났을 때부터 다시 손에 Bowstring을 붙인다.
- AttachBowString: default값을 true로 설정. 손에 Bowstring이 붙은 상태가 default.
Bone을 다룰 수 있는 4가지 공간
공간 | ||
1. Local | Bone 변경 불가. | |
2. Mesh | Option에 의해서만 변경 가능 | |
3. Component | Programming에 의해 수정이 가능 = Mesh안의 Component안에서의 상대 | |
4. World |
Unequip
확대
Begin Do Action - Bowstring(활줄)이 떼어지는 시점
확대
- Begin Do Action에서 Bowstring(활줄)이 떼어진다.
- 따라서 Attach Bow String을 false로 변경한다.
실행화면
Parkour
State Component
Set Parkour Mode 생성
Parkour Component
Gets
- Get Arrow Component
- Get Hit Result Arrow Type
- Get Data
Common
- Line Trace
- Play Parkour Montage
Trace
- Check Trace_Center
Parkour
- Do Parkour 파쿠르 수행
- Check Do Parkour 파쿠르를 수행할 수 있는지 확인
Climb
- Check_ClimbMode 기어 올라갈 수 있는지 체크
- Do Parkour_ClimbMode 기어 올라가는 움직임 수행
Get Data
- 로컬변수 생성: TempDatas (FParkour Data 배열)
Check Climb Mode 기어 올라갈 수 있는지 체크
- Check Climb Mode 함수는 플레이어가 해당 장애물을 넘어(=climb)갈 수 있는지 체크한다.
- 첫째로, 머리 위에 닿는게 있는지 확인한다
- 둘째로, 해당 장애물이 올라갈 수 있는 높이인지 체크한다.
Do Parkour Climb Mode 기어 올라가는 움직임 수행
이론 설명
Root Motion이 없는 애니메이션은 사용하면 안 된다.
Root Motion X | Root Motion O |
충돌체는 가만히 있고 움직임 (Enable Root Motion 켜도 똑같) 충돌이 일어나지 않고 물체를 통과함 |
충돌체가 같이 움직 충돌 발생. |
Root Motion X
Root Motion O
참고
Run_Climb_Montage 생성
Run_Climb 애니메이션 우클릭 - 몽타주 생성 - Run_Climb_Montage 생성
- FullBody로 변경
Parkour Data
- 리임포트 - Run_Climb_Montage 적용
실행화면
장애물을 오른 후에도 캐릭터가 계속해서 올라간다. 이에 대한 해결책은?