⭐ Unreal Engine/UE RPG Blueprint

[UE] 타격 구현 (Camera Shaking, Hit Stop)

Designerd 2023. 1. 19. 09:06

 

목차

     

     


     

     

    타격 구현(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 시리즈로 교체해준다.

     


     

    실행화면