아키텍처
플레이어
플레이어 (Player
스크립트, Player
프리팹)는 게임에 연결된 피어를 나타내며, 시각적 요소가 없습니다. 플레이어는 통계, 닉네임, 선택된 영웅, 게임 플레이 참여 의사 등을 동기화하는 데 사용됩니다.
플레이어 에이전트 (PlayerAgent
스크립트, PlayerAgent
프리팹)는 게임 내에서 플레이어가 조작하는 캐릭터를 나타내며, Gameplay
에 의해 생성되고, Health
, Weapons
와 같은 일반적인 기능을 가집니다. 필요에 따라 생성 및 제거가 가능합니다.
무기
개요
Fusion 발사체는 간단한 무기 관리 시스템을 포함합니다. 이 시스템은 주로 무기 전환을 처리하는 기본 구현입니다. 무기 드롭, 획득, 재장전, 반동 패턴, 동적 확산과 같은 고급 기능이 필요한 경우 Fusion BR 샘플을 참조하세요.
모든 종류의 무기를 관리하기 위해 편리한 무기 액션-컴포넌트 시스템이 포함되어 있습니다.
무기 액션
무기 액션은 단일 무기 동작을 나타내는 컴포넌트 집합입니다. 예를 들어, 하나의 무기 액션은 기본 발사이고, 다른 액션은 대체 발사입니다. 무기에는 다양한 액션이 포함될 수 있습니다.
무기 컴포넌트
무기 컴포넌트는 고유한 로직을 가지며 다양한 시나리오에서 재사용할 수 있는 무기 일부를 나타냅니다. 여러 컴포넌트를 조합하여 원하는 기능을 가진 무기를 만들 수 있습니다. Fusion 발사체에는 다음과 같은 컴포넌트가 포함됩니다:
WeaponMagazine
- 탄약 제공WeaponTrigger
- 무기 발사 시점 제어(플레이어 입력 확인, 발사 속도 조절)WeaponBarrel
- 발사체 발사WeaponFireEffect
- 총구 효과 표시, 발사 사운드 재생, 반동 적용, 카메라 흔들림 시작WeaponBeam
- 연속 빔 발사WeaponSpray
- 스프레이 발사체 발사
💡참고: 다양한 무기를 제작할 때 일부 컴포넌트를 교체하고 나머지는 재사용할 수 있습니다. 예를 들어, Laser Gun에서는 WeaponBarrel
을 WeaponBeam
으로 교체하여 빔을 발사합니다. 이 경우 탄약 공급 및 발사 트리거는 동일하게 유지되지만 발사 효과만 다릅니다. 또 다른 예로, 미니건은 회전하는 총신이 발사 속도를 올린 후 발사가 시작됩니다. 여기서는 표준 트리거 대신 DelayedTrigger
컴포넌트를 사용할 수 있습니다.
카메라 흔들림 효과
ShakeEffect
유틸리티는 무기 발사에 반응하여 카메라 흔들림을 제어합니다(SceneContext/SceneCamera/Shaker
객체에 위치). 이 효과는 WeaponFireEffects
컴포넌트에서 트리거 되며, 위치와 회전 흔들림 범위를 설정할 수 있습니다. ShakeEffect
유틸리티는 여러 카메라 흔들림의 중첩 및 연속적인 흔들림(연속 발사)을 지원합니다.
체력 및 피해 시스템
히트 동기화를 위해 발사체 데이터와 유사한 접근 방식을 사용합니다. 히트는 Hit
구조체의 작은 네트워크 순환 버퍼에 저장됩니다.
C#
public struct Hit : INetworkStruct
{
public EHitAction Action;
public float Damage;
public Vector3Compressed RelativePosition;
public Vector3Compressed Direction;
public PlayerRef Instigator;
public NetworkBool IsFatal;
}
Hit
구조체를 통해 적절한 히트 반응을 구성할 수 있습니다. 예를 들어, 히트 애니메이션 재생, UI에 히트 방향 표시, 공격자에게 히트 확인 및 피해 수치 표시, 피 효과 생성 등이 있습니다.
💡참고: 히트의 RelativePosition
이 데이터에 저장되는 방식에 주목하세요. 프록시의 위치는 서버에서 수신한 마지막 두 틱 사이에서 보간 되기 때문에, 절대 위치 대신 상대적 위치를 사용하면 피가 튀는 효과를 몸체에 정확하게 배치할 수 있습니다.
게임 플레이 요소
폭발
일정 반경 내에 피해를 입히는 간단한 네트워크 객체
입니다.
대미지 영역
이 영역 내부의 모든 대상에게 시간이 지남에 따라 피해를 입힙니다. 들어오는 피해를 테스트하는 데 사용하세요.
터렛
SimpleTurret
는 일정 간격으로 독립적인 발사체를 생성하는 데 사용됩니다. 목표물 검색 또는 회전 로직은 없습니다. PlayerAgent
프리팹 외부에서 무기를 테스트하는 데 사용됩니다.
게임 코어
GameManager
연결된 플레이어의 참가 및 퇴장을 처리하고 Player
프리팹을 생성합니다. 플레이어 데이터를 저장하고 재연결을 처리하는 더 복잡한 방법은 Fusion BR 샘플을 참조하세요.
Gameplay
Gameplay
는 PlayerAgent
프리팹의 생성 및 제거를 담당합니다. 이 기본 구현은 끝없는 데스매치로 작동합니다. 이 클래스를 상속하고 확장하여 데스매치, 깃발 쟁탈전, 제거전 등 다양한 게임 플레이 기능을 추가할 수 있습니다.
풀링
발사체가 포함된 프로젝트에서는 대량의 객체 생성이 예상됩니다(발사체, 총구 효과, 충돌 효과 등). 객체의 인스턴스화를 최소화하기 위해 Fusion 발사체는 모든 것을 풀링합니다.
다음 두 가지 종류의 풀이 있습니다:
NetworkObjectPool
: 네트워크 객체를 풀링 하는 데 사용됩니다. 네트워크 객체 풀을 사용하려면INetworkObjectProvider
인터페이스를 구현하고NetworkRunner
게임 오브젝트에 있어야 합니다. 자세한 내용은 Fusion 매뉴얼의 네트워크 객체 제공자 섹션을 참조하세요.ObjectCache
: 네트워크와 무관한 발사체 및 충돌 효과와 같은 객체를 풀링 하는 범용GameObject
풀입니다. 지정된 시간 후 객체를 반환하는 기능도 제공합니다.
씬 컨텍스트
**SceneContext
**는 코드베이스 전체에서 필요한 공통 게임 오브젝트 또는 기타 정보를 정적 변수 없이 안전하게 접근할 수 있도록 제공합니다. 씬 컨텍스트는 씬 로드가 완료된 후(GameManager.OnSceneLoadDone
) 씬에 있는 모든 IContextBehaviour
컴포넌트에 할당되며, 네트워크 객체 풀의 ContextBehaviour
에도 할당됩니다. SceneContext
에 대한 액세스가 필요한 경우 NetworkBehaviour
대신 ContextBehaviour
를 상속하세요.