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)

 


 

 

 

실행화면