Projectile 방식의 무기와 Hit Scan 방식의 무기는 동작 원리에 따라 크게 차이가 있다. Projectile 방식의 무기는 발사체(

Projectile)를 생성하고, 이 발사체가 일정 속도로 움직이며 목표물에 도달할 때까지 시간이 필요하다. Hit Scan 방식의 무기는 "즉시적인" 충돌 감지 메커니즘을 사용한다.

 

목차

     

     


     

     

     

     

     

    Component 구조 만들기 

     


     

    CombatComponent

     

    CombatComponent.h

     

     

    CombatComponent.cpp

     

     

    Q. UFUNCTION(Server, Reliable)

    void ServerFire(const FVector_NetQuantize& TraceHitTarget); 와 같이 서버에 TraceHitTarget을 보내는 이유는?

     

    Answer. 각각의 Client들이 총알을 발사하는 방향을 서버에 알려주기 위해서이다. 서버에서 발사 방향 정보를 얻은 다음 다른 Clinet들에게도 업데이트해서 보여준다.  

     

     

    ※ 참고) NetSerialization.h

    NetSerialization.h 내에 있는 struct FVector_NetQuantize

    • FVector의 상속을 받기 때문에 FVector 매개변수 타입에 넣어줄 수 있다.
    • RPC 직렬화(Serialization)에 사용

     

     


     

     

     

     

     

    발사 무기 만들기

     


     

    Projectile  vs.   Hit Scan

     

      Projectile 방식의 무기 Hit Scan 방식의 무기
    구현   projectile spawn 하기    line trace 쏘기
    발사체 속도   발사체의 속도(velocity)를 정할 수 있다.    없다. line trace를 쏘기 때문에 바로 물체에 맞는다.
    중력 (Gravity)   적용 가능    적용 불가능.
    파티클   Tracer particles   Beam particles
    이벤트   Hit Event   X
    무기 예시   화살, 총알, 로켓  

     

    Projectile 방식의 무기와 Hit Scan 방식의 무기는 동작 원리에 따라 크게 차이가 있다.

     

    Projectile 방식의 무기: 이 방식은 발사체(Projectile)를 생성하고, 이 발사체가 일정 속도로 움직이며 목표물에 도달할 때까지 시간이 필요하다. 즉, 실제 세계의 물리법칙을 따르는 경우가 많다. 예를 들어 화살, 로켓 등이 여기에 해당합니다. 발사체는 그래비티 영향을 받을 수 있으며, 충돌 감지시 피해를 입히거나 특정한 효과를 발생시킵니다.

     

    Hit Scan 방식의 무기: 이 방식은 "즉시적인" 충돌 감지 메커니즘을 사용한다. 즉, 사용자가 발사 버튼을 누르면 게임 엔진은 line trace 충돌 검사를 사용하여 명중 여부를 결정한다. 만약 line trace가 오브젝트와 교차하면 그 오브젝트는 즉시 피해를 입는다. 대부분의 근거리 및 장거리 총기류에서 볼 수 있는 메커니즘이며, 프레임 사이에 걸친 지연 없이 즉각적인 결과를 제공하는 장점이 있다. 


     

     

    Weapon

     

    Weapon.h

     

     

    Weapon.cpp

     

     

     


     

     

    ProjectileWeapon 생성

     

    Weapon 클래스의 상속을 받는 ProjectileWeapon 생성

     

    ProjectileWeapon.h

     

     

    ProjectileWeapon.cpp

     

     

     

     

     

    BP_AssaultRifle

    발사체 할당

    • Details - Projectile Weapon
      • Projectile Class:  BP_Projectile 할당

    애니메이션 할당

    • Weapon Properties
      • Fire Animation: Fire_Rifle_W

    총알 탄피 클래스 할당

    • Weapon
      • Casing Class: BP_Casing

     

     

    Projectile 생성

     

     

     

    Projectile.h

     

     

    Projectile.cpp

     

     

     

    BP_Projectile 생성

     

    발사체의 궤적을 표현할 Tracer 파티클을 넣어준다.

     


     

     

    Casing

     

    새 C++ 클래스 - Actor - Casing  생성

     

     

     

    각각의 Client는 총알을 local로 Spawn하기 때문에
    총알탄피 클래스(Casing)는 Replicated Actor가 아니어도 됩니다.  

     

     

     

    Casing.h

     

     

     

     

    Casing.cpp

     

     

     

     

    BP_Casing

     


     

     

     

    주의사항 - Muzzle의 방향과 발사체의 방향을 일치시켜줘야 한다.

     

    무기 Mesh

    Muzzle의 방향과 발사체의 방향을 일치시켜줘야 한다.

     

    총알이 발사되고 탄피가 빠져나가는 방향을 x방향으로 설정해준다. 

     

     

    발사체 충돌체 (BP_Projectile)

     


     

     

     

    실행화면