타격 구현(Camer Shaking, Hit Stop)

BP: Blueprint Class
BS: Blend Space
ABP: Animation Blueprint
AN: Blueprint Class AnimNotify
ANS: Blueprint Class - AnimNotifyState
E: Enum 열거형
DT: Data Table
F: 구조체

 

UE2212_02

  Level - LEVEL
ABP_Player
BP_GameMode
 
AdvancedMagicFX12
Materials  
Meshes  
Particles  
Textures  
Character Animation Common
Sword
Unarmed
BlendSpaces BS_Fist
BS_Sword

BS_Unarmed
Materials

MaterialLayers
M_UE4Man_Body
M_UE4Man_ChestLogo
Mesh SK_Mannequin
SK_MAnnequin_PhysicsAsset
Skel_Mannequin

Montages
Common HitReaction_Move_Montage
HitReaction_Stop_Montage
Fist Fist_Attack_1_Montage
Fist_Attack_2_Montage
Fist_Attack_3_Montage
Fist_Hitted_Montage
Sword Draw_Sword_Montage
Sword_Attack_1_Montage
Sword_Attack_2_Montage
Sword_Attack_3_Montage
Enemy_DeadFall_Montage
HitReaction_Montage
 
Textures UE4_LOGO_CARD
UE4_Mannequin__normals
UE4_Mannequin_MAT_MASKA
UE4Man_Logo_N
Weapons Sword
Component EStateType
MovingComponent
StateComponent
WeaponComponent
   
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
   
Player BP_Player    
Sounds S_BGM
S_HitPunch
S_OneHand_Hit
   
  Fist Combo_Fist - Blueprint Class Actor Weapon_Combo 상속
DT_DoAction_Fist

DT_Equip_Fist
DT_HitData_Fist
 
Weapons
Sword Combo_Sword - Blueprint Class Actor Weapon_Combo 상속
CS_Sword
DT_DoAction_Sword
DT_Equip_Sword
DT_HitData_Sword
 
EWeaponType
FDoActionData
FEquipData
FHitData
Weapon - Blueprint Class Actor
Weapon_Combo - Blueprint Class Actor Weapon 상속
M_Weapon
   

 

 


게임의 요소 - 타격

 

타격감을 결정지는 요소

  • Animation 애니메이션 (ex. Hit Stop 경직)
  • Sound 사운드
  • Effects 이펙트
  • Camera Effect 카메라효과 (ex. Camera Shaking)
  • Vibration 진동 ()



이번시간에 Hit Stop, Camera Shaking 구현!

 

 


 

리플렉션

 

enum A
{
Test, Sword,
}
class string
{
}

리플렉션

자료형의 타입을 변수로 다루어주는 기능. 위의 string을 type-id로만 다룰 수 있는데 언리얼C++블루프린트에서는 변수로 다룰 수 있다.

 

 


 

Camer Shaking

 


 

Sine Wave & Perline Noise

 

Sine Wave

  • 규칙적인 패턴에 자주 이용

Amplitude, Time Period and Frequency of a Vibration - GeeksforGeeks


Perline Noise

  • 구름, 지형과 같이 랜덤한 것을 구현할 때 사용


Mathf-PerlinNoise - Unity 스크립팅 API (unity3d.com)

 

Mathf-PerlinNoise - Unity 스크립팅 API

Generate 2D Perlin noise.

docs.unity3d.com





UStaticMeshComponent | Unreal Engine Documentation

 

UStaticMeshComponent

StaticMeshComponent is used to create an instance of a [UStaticMesh](API\Runtime\Engine\Engine\UStaticMesh).

docs.unrealengine.com

 

 

 


 

CS_Sword 생성 (카메라 흔들림 구현)

 

  • Oscillation Duration: 0.25초 동안 진동(흔들림)하겠다.
  • Oscillation Blend in Time: 기준시간에서 현재시간까지 오는 시간. 카메라 흔들리지 않는 상태에서 카메라가 흔들리는 상태까지 오는데 0초.
  • Oscillation Blend Out Time: 흔들림에서 원래데로 돌아가는데 걸리는 시간.
  • Rot(ational) Oscillation: 회전 진동.
  • Loc(ational) Oscillation: 카메라 앞뒤상하좌우 진동(흔들림).
    • 여기서는 Camera Shaking 효과로 상하 흔들림좌우 흔들림을 구현한다. 앞뒤 축 흔들림은 잘 사용하지 않는다.
  • FOV Oscillation: 수직 시야각. 확대축소.

 


 

BP_Enemy 수정 - Play Camera Shake 생성

 

Apply Damage

 

 Apply Damage > Play Camera Shake 생성

 


 

실행화면

 

 


 

Hit Stop

 

 


Hit Stop과 Camera Shaking

 

ㅁ Delay ㅁ 멈췄다가 넘어감

위의 코드는 테스트만 하고 사용하지 않음.
  • Delay가 다 회복된 다음에 카메라 흔들림이 끝에 나온다.
  • 이러면 타격 순간에는 카메라가 흔들리지 않는다.
  • ->하지만 우리는 타격 순간에도 카메라가 흔들려서 좀 더 리얼한 타격감을 구현하고 싶다. 어떻게 할까?

 

ㅁ Timer ㅁ 멈추지 않음. Timer시점부터 시간 기록.

 


 

BP_Enemy 수정 - Play hit Stop 생성

 

Apply Damage

 

 Apply Damage > Play Hit Stop 생성

 

세부항목 Zoom in


 

실행화면

 

  • 세 번째 공격 때 Hit Stop이 실행된다.

 


 

 

Fist 주먹으로 때리기 구현

 

 


 

 

BS_Fist 생성

 

BS_Sword를 복사하여 BS_Fist 생성 (Animation - BlendSpace)

 

  • 에셋 브라우저에 있는 Fist_ 애니메이션을 맞는 위치에 넣어준다.

 

 


 

ABP_Player 수정

 

AnimGraph

 

AnimGraph > Fist

 

AnimGraph > Fist > BlendSpace

 


 

Weapon Component 수정

 

Set Fist Mode

  • Set Sword Mode를 복사하여 Set Fist Mode를 생성한다.
  • Set Mode 노드에서  In New Type을 Fist로 바꿔준다.

 

 

 


 

Project Setting - 입력

 

 

 

 

 


 

BP_Player 수정

 

Action

 

 


 

Fist_Attack_1~3_Montage 생성

 

Fist_Attack_1_Montage 생성

 

Fist_Attack_2_Montage 생성

 

Fist_Attack_3_Montage 생성


 

DT_DoAction_Fist / DT_Equip_Fist / DT_HitData_Fist .csv

 

DT_DoAction_Fist.csv

DT_Equip_Fist

 

DT_HitData Fist.csv

 

 

 


 

Combo_Fist 수정

 

  • Data Tables를 DT_XXXX_Fist 시리즈로 교체해준다.

 


 

실행화면