Fusion Golf
개요
Fusion Golf 샘플은 서버에 권한이 있는 클라이언트 예측 모델을 사용하여 물리학에 중점을 둔 아케이드 골프 레이싱 게임을 만드는 방법을 보여줍니다. 이 샘플은 룸 코드를 통한 직접적인 연결뿐만 아니라 세션 브라우저도 갖추고 있습니다. 호스트는 홀당 최대 시간, 최대 타수, 플레이어 간 충돌 여부, 세션 브라우저에 세션이 표시되는지 등 다양한 게임 설정을 수정할 수 있습니다. 샘플은 캐논, 스피너, 부스트 터널, 엘리베이터 플랫폼과 같은 다양한 물리 기반 객체와 함께 18홀 코스입니다.
시작하기 전에
샘플 실행을 위해, 우선 PhotonEngine 관리 화면에서 Fusion AppId를 생성하고 Real Time 설정 (Fustion 메뉴에서 접근 가능)의 App Id Fusion
필드에 붙여 넣습니다. 그러고 나서 Scenes
폴더의 Menu
씬을 로드하고 Play
를 누릅니다.
다운로드
버전 | 릴리즈 일자 | 다운로드 | ||
---|---|---|---|---|
1.1.6 | Apr 12, 2023 | Fusion Golf 1.1.6 Build 164 |
하이라이트
- 전체 네트워크 게임 상태 시스템(게임 전, 인트로, 플레이, 아웃ㅌ로, 게임 후).
- 다른 플레이어 관람
- 사용자 지정 가능한 게임 설정(충돌, 홀 수, 최대 샷 수, 최대 시간)
- 세계에 있는 개체의 동기화된 상태
- 로비 브라우저(및 룸비 공개 룸 설정 기능)
- 물리학 중심 객체(캐논, 스피너, 엘리베이터 플랫폼, 부스트 터널)
- 플레이어 외관 사용자 설정(RGB 슬라이더)
- 지역 설정, 닉네임 설정, 그래픽 옵션
프로젝트
폴더 구조
메인 스크립트 폴더 /Scripts
에는 Fusion과의 인터페이스 기능이 기본인 스크립트가 포함된 하위 폴더 Networking
가 있습니다.
주목해야 할 스크립트:
PlayerRegistry
PlayerRegistry는 룸에 있는 각 플레이어에 대한 참조를 저장하고 한 명 이상의 플레이어에 대해 카운트, 선택 및 작업을 수행하기 위한 유틸리티 메소드를 제공합니다. 유틸리티 기능의 기본 동작은 관중인 플레이어를 무시하는 것이지만 includeSpectators
매개 변수가 true일 경우 전체 플레이어 집합에서 작동합니다.
관중
관중은 경기에 참가하기보다는 관전하는 것을 명시적으로 선택한 플레이어입니다. 관중의 PlayerObject
에는 Controller
가 할당되지 않습니다.
GameState
게임 로직의 흐름과 행동은 GameState
NetworkBehaviour에 의해 제어됩니다. GameState
는 네트워크화된 StateMachine
속성이 상태로 사용하는 게임 단계의 열거를 정의합니다.
StateMachine<T>
는 StateHooks
클래스를 다음 3개의 필드로 정의합니다: onEnter
, onExit
, 및 onUpdate
. StateMachine
클래스를 사용하는 경우 각 열거 상태에는 상태 진입, 종료 및 활성 상태 유지 시 발생하는 작업을 정의하는 StateHooks
가 있을 수 있습니다.
게임 속으로
사용자는 세션 브라우저를 사용하거나 세션 코드를 통해 직접 세션을 호스팅 하거나 참여할 수 있습니다. 세션 코드 입력은 호스트를 선택하는 경우 선택사항이며, 빈 값으로 두면 자동으로 생성됩니다. 세션에 들어가면 코드가 화면 상단에 표시됩니다.
세션 코드는
runner.SessionInfo.Name
를 통해 접근할 수 있습니다.
지역 선택
호스트 또는 참여를 선택하기 전에 사용자에게 사용할 Photon Cloud 영역을 선택할 수 있는 드롭다운이 표시됩니다. 드롭다운 옵션은 [지역 문서]https://doc.photonengine.com/en-us/fusion/current/connection-and-authentication/regions#available_regions)에 따라 선택됩니다.
Matchmaker
호스팅, 참여 및 세션 브라우저는 모두 Matchmaker
클래스에서 처리합니다. 이것은 NetworkRunner.StartGame
메소드의 래퍼 역할을 하며 연결 오류가 발생할 경우 사용자에게 표시하기 위해 오류를 DisconnectUI
에 전달합니다.
입력 처리
PlayerInputBehaviour.cs
에서 사용자 지정 INetworkInput
구조체 PlayerInput
으로 입력이 폴링 됩니다. 이 샘플의 입력은 마우스 클릭과 이동만으로 구성됩니다.
PlayerInput
은 비교적 단순하며 3개의 필드로 구성되어 있습니다.
isDragging
- 플레이어가 마우스 버튼을 누르고 있는지 여부dragDelta
- 플레이어의 마우스가 얼마나 아래로 끌려 내려갔는지yaw
- 플레이어가 마주 보고 있는Angle
이 데이터는Putter
플레이어 스크립트로 처리되며 공을 넣는 것 외에도 로컬 플레이어와 관중 모두가 적절한 UI를 볼 수 있도록 도와줍니다.
플레이어
플레이어는 2 개의 부분으로 처리됩니다:
PlayerObject
- 이 객체와 관련된PlayerRef
값, 플레이어의 컨트롤러(Putter
)에 대한 참조, 룸의 인덱스, 닉네임, 선택한 색상 및 스코어와 관련된 게임 플레이 데이터가 있습니다.Putter
- 물리 및 UI 입력에 대한 응답 담당
타사 에셋
Golf 샘플에는 각 제작자가 제공한 여러 에셋이 포함되어 있습니다. 전체 패키지는 해당 사이트에서 획득할 수 있습니다:
- BOXOPHOBIC의 Skybox Extended Shader
- Kenney의 Kenney's Minigolf Kit
- Erik Roystan Ross의 Toon Water Shader
- Broken Vector의 Low Poly Cliff Pack
- Broken Vector의 Low Poly Tree Pack
- Milena B Design의 Fredoka One font
중요: 상업용 프로젝트에 사용하기 위해서는 각각의 크레에이터로부터 라이선스를 구매해야 합니다.
Back to top