발사체
주요 발사체 스크립트(HitscanProjectile
및 KinematicProjectile
)는 두 가지 용도로 사용됩니다:
- 발사체 데이터 생성 및 조작을 위해
GetFireData
와OnFixedUpdate
메소드를 구현합니다. 이 메소드들은FixedUpdateNetwork
에서 상태 권한과 입력 권한이 있는 객체에서 호출되며, 프리팹 인스턴스가 아닌 프리팹 자체에 대해 직접 호출됩니다.
C#
public virtual KinematicData GetFireData(Vector3 firePosition, Vector3 fireDirection) {}
public virtual void OnFixedUpdate(ref KinematicData data) {}
💡참고: 발사체는 NetworkBehaviour
가 아니며 NetworkObject
와 연결되지 않습니다. 따라서 GetFireData
나 OnFixedUpdate
에서 사용하는 모든 네트워크 데이터는 발사체 데이터 구조체에 포함되어야 합니다.
- 발사체 인스턴스는 발사체의 시각적 표현에도 사용됩니다. 이를 통해 움직임 코드를 포함한 시뮬레이션(
FUN
)과 렌더링(Render
) 기능을 공유할 수 있습니다. 발사체 인스턴스에 대해 실행되는 메소드는Activate
,Deactivate
,Render
이며, 이들은 순수하게 시각적 역할을 합니다.
C#
public virtual void Activate(ref KinematicData data) {}
public virtual void Deactivate() {}
public virtual void Render(ref KinematicData data, ref KinematicData fromData, float alpha)
각 발사체는 충돌 시 시각 효과를 생성하거나 새로운 NetworkObject
(예: 폭발)을 생성할 수 있습니다.
발사체 유형
Fusion 발사체는 다양한 발사체 유형을 지원하며, 여러 일반적인 시나리오에서 사용할 수 있습니다.
히트스캔 발사체
히트스캔 발사체는 지정된 최대 거리로 레이캐스트를 사용하며, 입력과 동시에 발사되어 즉시 히트를 평가합니다.
InstantHitscanProjectile
즉발 히트 효과를 가진 히트스캔 발사체입니다. 총구에서 목표 위치까지의 시각적 궤적이 표시되며, 시간이 지남에 따라 사라집니다.
예시 무기: 저격총 (사라지는 궤적), 샷건 (즉발 시각 효과)
FlyingHitscanProjectile
히트가 즉시 처리되지만, 지정된 속도로 목표 위치까지 이동하는 더미 발사체가 표시됩니다.
예시 무기: 소총
운동학적 발사체
운동학적 발사체는 시간이 지남에 따라 이동하며, 매 시뮬레이션 틱마다 이전 위치와 새 위치 간에 짧은 레이캐스트를 실행합니다.
SimpleKinematicProjectile
직선으로 비행하는 운동학적 발사체입니다.
예시 무기: 펄스 건
AdvancedKinematicProjectile
중력의 영향을 받거나 벽 및 객체에서 반사되는 발사체입니다. 이 발사체 유형은 여러 동작을 지원합니다:
터치 시 폭발하는 발사체
예시 무기: 펄스 건 (대체 발사 - 수류탄)일정 시간 후 폭발하는 반사 발사체
예시 무기: 소총 (대체 발사 - 수류탄)직선으로 반사되는 발사체
예시 무기: 리코셰 발사기
HomingKinematicProjectile
목표를 따라가는 발사체입니다. 목표물의 위치를 예측해 움직이는 목표를 맞출 수 있으며, 특정 신체 부위를 조준하도록 설정할 수 있습니다.
예시 무기: 유도탄 발사기 (기본 발사: 빠른 유도탄, 대체 발사: 느린 재조준 로켓)
SprayProjectile
스프레이처럼 동작하는 발사체입니다. 발사체가 속도를 줄이거나 상승 및 하강하며 시간이 지남에 따라 지름이 변화할 수 있습니다. 높은 확산으로 발사하면 화염방사기, 산성총, 치유 스프레이 등 다양한 무기에서 스프레이 효과를 구현할 수 있습니다.
예시 무기: 화염방사기
레이
일정 시간 동안 지속적으로 피해를 주는 레이입니다. 레이는 WeaponBeam
무기 컴포넌트를 사용해 구현되며(자세한 내용은 무기 컴포넌트 섹션 참조), 이 프로젝트에서는 실제 발사체로 간주되지 않습니다.
예시 무기: 레이저 건
독립형 발사체
독립된 네트워크 객체로 생성될 수 있는 발사체입니다. 특수한 상황에서만 사용해야 합니다. 자세한 내용은 발사체 기초 문서의 "올바른 접근 방법 선택" 섹션을 참조하세요.
StandaloneProjectile
표준 발사체 기능을 래핑 한 발사체입니다. KinematicProjectileBuffer
와 유사하게 KinematicData
를 생성하고 업데이트하지만, 단일 발사체에 대해서만 수행합니다. 네트워크 조건이 좋지 않을 때 스폰 지연을 줄이기 위해 NetworkObjectBuffer
를 사용해 미리 생성할 수 있습니다.
예시 무기: 리코셰 발사기 (대체 발사 - 반사 드롭)
발사체 보간
1인칭 게임에서 발사체를 발사할 때는 무기 총구에서 직접 계산하는 방법(현실적인 접근)과 카메라 중앙에서 계산하는 방법(표준 접근) 중 하나를 선택할 수 있습니다.
💡참고: 현실적인 접근 방식은 일부 하드코어 게임에서 사용됩니다. 이 방식은 보다 현실적인 발사감을 제공하지만, 플레이어 애니메이션에 따라 발사 위치가 변동되어 불안정할 수 있으며 모서리와 같은 불필요한 객체에 맞을 가능성이 높아집니다.
Fusion 발사체는 카메라 중앙에서 발사하는 표준 접근 방식을 사용합니다. 이 방식은 시뮬레이션 경로(카메라에서 시작)와 렌더링 경로(무기 총구에서 시작) 간의 불일치를 만듭니다. 이를 해결하기 위해 발사체 위치를 무기 총구에서 실제 경로로 보간합니다. 보간 시간 및 보간 속도 설정은 모든 운동학적 발사체에 대해 구성할 수 있습니다.
💡참고: 발사체 보간은 운동학적 발사체에만 필요합니다. 히트스캔 발사체는 충돌 지점을 미리 알고 있으므로, 더미 시각 효과가 해당 지점까지 바로 이동하면 됩니다.
Back to top