This document is about: FUSION 2
SWITCH TO

아키텍처

플레이어

플레이어 (Player 스크립트, Player 프리팹)는 게임에 연결된 피어를 나타내며, 시각적 요소가 없습니다. 플레이어는 통계, 닉네임, 선택된 영웅, 게임 플레이 참여 의사 등을 동기화하는 데 사용됩니다.

플레이어 에이전트 (PlayerAgent 스크립트, PlayerAgent 프리팹)는 게임 내에서 플레이어가 조작하는 캐릭터를 나타내며, Gameplay에 의해 생성되고, Health, Weapons와 같은 일반적인 기능을 가집니다. 필요에 따라 생성 및 제거가 가능합니다.

Photon Dummy

무기

개요

Fusion 발사체는 간단한 무기 관리 시스템을 포함합니다. 이 시스템은 주로 무기 전환을 처리하는 기본 구현입니다. 무기 드롭, 획득, 재장전, 반동 패턴, 동적 확산과 같은 고급 기능이 필요한 경우 Fusion BR 샘플을 참조하세요.

모든 종류의 무기를 관리하기 위해 편리한 무기 액션-컴포넌트 시스템이 포함되어 있습니다.

무기 액션

무기 액션은 단일 무기 동작을 나타내는 컴포넌트 집합입니다. 예를 들어, 하나의 무기 액션은 기본 발사이고, 다른 액션은 대체 발사입니다. 무기에는 다양한 액션이 포함될 수 있습니다.

Weapon Action
필요한 모든 무기 컴포넌트를 갖춘 펄스 건의 기본 무기 액션

무기 컴포넌트

무기 컴포넌트는 고유한 로직을 가지며 다양한 시나리오에서 재사용할 수 있는 무기 일부를 나타냅니다. 여러 컴포넌트를 조합하여 원하는 기능을 가진 무기를 만들 수 있습니다. Fusion 발사체에는 다음과 같은 컴포넌트가 포함됩니다:

  • WeaponMagazine - 탄약 제공
  • WeaponTrigger - 무기 발사 시점 제어(플레이어 입력 확인, 발사 속도 조절)
  • WeaponBarrel - 발사체 발사
  • WeaponFireEffect - 총구 효과 표시, 발사 사운드 재생, 반동 적용, 카메라 흔들림 시작
  • WeaponBeam - 연속 빔 발사
  • WeaponSpray - 스프레이 발사체 발사

💡참고: 다양한 무기를 제작할 때 일부 컴포넌트를 교체하고 나머지는 재사용할 수 있습니다. 예를 들어, Laser Gun에서는 WeaponBarrelWeaponBeam으로 교체하여 빔을 발사합니다. 이 경우 탄약 공급 및 발사 트리거는 동일하게 유지되지만 발사 효과만 다릅니다. 또 다른 예로, 미니건은 회전하는 총신이 발사 속도를 올린 후 발사가 시작됩니다. 여기서는 표준 트리거 대신 DelayedTrigger 컴포넌트를 사용할 수 있습니다.

카메라 흔들림 효과

ShakeEffect 유틸리티는 무기 발사에 반응하여 카메라 흔들림을 제어합니다(SceneContext/SceneCamera/Shaker 객체에 위치). 이 효과는 WeaponFireEffects 컴포넌트에서 트리거 되며, 위치와 회전 흔들림 범위를 설정할 수 있습니다. ShakeEffect 유틸리티는 여러 카메라 흔들림의 중첩 및 연속적인 흔들림(연속 발사)을 지원합니다.

Camera shake
카메라 흔들림 설정

체력 및 피해 시스템

히트 동기화를 위해 발사체 데이터와 유사한 접근 방식을 사용합니다. 히트는 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이 데이터에 저장되는 방식에 주목하세요. 프록시의 위치는 서버에서 수신한 마지막 두 틱 사이에서 보간 되기 때문에, 절대 위치 대신 상대적 위치를 사용하면 피가 튀는 효과를 몸체에 정확하게 배치할 수 있습니다.

게임 플레이 요소

폭발

일정 반경 내에 피해를 입히는 간단한 네트워크 객체입니다.

Explosion

대미지 영역

이 영역 내부의 모든 대상에게 시간이 지남에 따라 피해를 입힙니다. 들어오는 피해를 테스트하는 데 사용하세요.

Damage Area

터렛

SimpleTurret는 일정 간격으로 독립적인 발사체를 생성하는 데 사용됩니다. 목표물 검색 또는 회전 로직은 없습니다. PlayerAgent 프리팹 외부에서 무기를 테스트하는 데 사용됩니다.

Turret

게임 코어

GameManager

연결된 플레이어의 참가 및 퇴장을 처리하고 Player 프리팹을 생성합니다. 플레이어 데이터를 저장하고 재연결을 처리하는 더 복잡한 방법은 Fusion BR 샘플을 참조하세요.

Gameplay

GameplayPlayerAgent 프리팹의 생성 및 제거를 담당합니다. 이 기본 구현은 끝없는 데스매치로 작동합니다. 이 클래스를 상속하고 확장하여 데스매치, 깃발 쟁탈전, 제거전 등 다양한 게임 플레이 기능을 추가할 수 있습니다.

풀링

발사체가 포함된 프로젝트에서는 대량의 객체 생성이 예상됩니다(발사체, 총구 효과, 충돌 효과 등). 객체의 인스턴스화를 최소화하기 위해 Fusion 발사체는 모든 것을 풀링합니다.

다음 두 가지 종류의 풀이 있습니다:

  • NetworkObjectPool: 네트워크 객체를 풀링 하는 데 사용됩니다. 네트워크 객체 풀을 사용하려면 INetworkObjectProvider 인터페이스를 구현하고 NetworkRunner 게임 오브젝트에 있어야 합니다. 자세한 내용은 Fusion 매뉴얼의 네트워크 객체 제공자 섹션을 참조하세요.

  • ObjectCache: 네트워크와 무관한 발사체 및 충돌 효과와 같은 객체를 풀링 하는 범용 GameObject 풀입니다. 지정된 시간 후 객체를 반환하는 기능도 제공합니다.

씬 컨텍스트

**SceneContext**는 코드베이스 전체에서 필요한 공통 게임 오브젝트 또는 기타 정보를 정적 변수 없이 안전하게 접근할 수 있도록 제공합니다. 씬 컨텍스트는 씬 로드가 완료된 후(GameManager.OnSceneLoadDone) 씬에 있는 모든 IContextBehaviour 컴포넌트에 할당되며, 네트워크 객체 풀의 ContextBehaviour에도 할당됩니다. SceneContext에 대한 액세스가 필요한 경우 NetworkBehaviour 대신 ContextBehaviour를 상속하세요.

Back to top