무기
개오
WeaponsSystem
은 발사체 발사 또는 일정한 속도로 발사 행동을 반복하는 방식을 제공합니다.
무기 설정 Setup
모든 무기는 Weapons
컴포넌트와 WeaponController
로부터 상속받은 특수 컨트롤러가 있는 자체 엔티티입니다. 이 설정을 통해 런타임에 플레이어 엔티티에서 무기를 추가하거나 제거할 수 있습니다.
WeaponController
모든 무기 컨트롤러는 WeaponController
클래스에서 상속되므로 다음과 같은 속성을 사용할 수 있습니다.
FireOffset
: 손에서 무기 발사/발사체가 생성되는 지점까지의 상대 오프셋입니다.MinRange
: 자동 발사 시작을 위한 최소 거리MaxRange
: 자동 발사 시작을 위한 목표물의 최대 거리CriticalChance
: 두 배 타격을 위한 비율 변화MinRangeAutoFireAngle
: 목표물로부터의 거리가MinRange
와 같을 때 자동으로 사격을 시작하기 위한 플레이어 조준 방향의 최대 각도입니다.MaxRangeAutoFireAngle
: 목표물로부터의 거리가MaxRange
와 같을 때 자동으로 사격을 시작하기 위한 플레이어 조준 방향의 최대 각도입니다.AutoFireAngleBendFactor
:MinRangeAutoFireAngle
와MaxRangeAutoFireAngle
사이의AutoFire
각도의 보간 선형성을 제어합니다.
실행 흐름
WeaponsSystem
은 게임 내 WeaponsDesires
, Weapons
컴포넌트, 다양한 무기 컨트롤러의 조정을 조율합니다. 다음 그림은 실행 흐름과 서로 다른 이동 부분 간의 인터페이스에 사용되는 API를 보여줍니다.
AutoFire
다음 다이어그램에서는 WeaponController
속성과 AutoFire
사이의 관계를 간단하게 하향식 관점에서 설명합니다.
MinRange
와 MaxRange
사이의 AutoFire
동작은 AutoFireAngleBendFactor
속성에 의해 제어됩니다. 밴드 팩터가 높을수록 AutoFire
각도가 MinRangeAutoFireAngle
에서 MaxRangeAutoFireAngle
로 빠르게 보간됩니다. 다시 말해 AutoFire
영역이 좁혀지고 있다는 뜻입니다.
포함된 컨트롤러
FPS 템플릿은 두 개의 상세한 예제에 WeaponController
를 구현합니다:
ProjectileWeaponController
그리고,MeleeWeaponController
.
ProjectileWeapon
ProjectileWeaponController
는 발사체를 쏘는 모든 무기에 사용할 수 있습니다. 동작은 속성이 조정되는 방식과 Projectile
속성에서 참조되는 발사체에 따라 달라집니다.
Projectile
: 발사체 프로토 타입의 참조ProjectileCount
: 단일 무기 사용 시에 발사되는 발사체 개수MagazineAmmo
: 연발 무기의 발사체 개수WeaponAmmo
: 무기가 갖고 있을 수 있는 총 발사체 개수UnlimitedAmmo
: 무제한 발사체에 대해서 true로 설정Cadence
: 분당 발사되는 발사체의 개수ReloadDuration
: 무기 재장전에 걸리는 시간DispersionAngle
: 각도로 각 축별의 발사 분산 각도
MeleeWeapon
MeleeWeaponController
는 모든 근거리 무기에 사용할 수 있습니다. 간단한 근거리 피해 외에도 Effect
속성을 사용하여 추가 효과를 적용할 수 있습니다.
Effect
: 밀리 효과 프로토타입의 참조AttackDelay
: 효과가 생성되기 전까지의 시간Cooldown
: 다음 공격 실행까지의 시간
새로운 무기 생성하기
다음은 FPS 템플릿에서 새로운 무기 를 생성하는 단계별 절차입니다.
- Quantum 솔루션에서,
WeaponController
에서 상속받은 새로운MyWeaponController
를 생성합니다. - 컨트롤러에 직렬화 가능한 필드들을 추가합니다 (환경 구성).
- 필요시,
MyWeapon
컴포넌트의 정의와 롤백 가능한 데이터와 같은 기타 구조체들의 정의를 포함하는MyWeapon.qtn
을 생성합니다. - 필요시 기본 속성들을 오버라이드하고 컨트롤러에서
Initialize()
,Deinitialize()
,Update()
및Fire()
메소드를 구현합니다. - 사용할 수 있는 컨트롤러 인터페이스를 구현합니다 (예,
IAttributesProvider
, ...). quantum.code
솔루션을 다시 컴파일합니다.- 유니티에서, 빈 게임 오브젝트를 생성하고 자식 객체로 비주얼 컴포넌트 / 모델을 추가합니다.
- 게임 오브젝트에
Entity
,EntityPrototype
,EntityComponentController
및EntityComponentWeapon
스크립트를 추가합니다. Entity
컴포넌트에서 다음과 같이 설정합니다:- 무기가 항상 손에 스냅 되는 경우
Transform Synchronization
을None
으로 - 무기가 소유 엔티티 없이 존재할 수 없을 때
Require Owner
를true
로 설정
- 무기가 항상 손에 스냅 되는 경우
EntityComponentController
컴포넌트에서,WeaponController
드롭다운 메뉴에서MyWeaponController
를 선택하고 정의된 속성들을 채웁니다.EntityComponentWeapon
에서 정의된 속성들을 채웁니다.- 엔티티의 행동을 정의하기 위해서 다른 엔티티 컴포넌트들을 추가합니다 (예,
EntityComponentMyWeapon
, ...). - 엔티티의 프리팹을 생성합니다 (선택).
Quantum > Generate Asset Resources
메뉴를 통해 에셋 리소스 생성을 실행합니다.Quantum > Bake > Prefabs
메뉴에서 프리팹 베이킹 절차를 실행합니다.- 이제 무기를 사용할 준비가 되었습니다 - 참조 엔티티 프로토타입.