수정중인 페이지 입니다.

플레이어

소개

플레이어

Fusion의 '플레이어'는 Fusion에 플레이어 입력을 제공할 수 있는 모든 피어를 의미합니다. 일반적으로 서버 이외의 모든 피어 유형입니다. 각 NetworkRunner는 하나의 PlayerRef와만 연결됩니다. 만약 게임이 하나의 NetworkRunner에서 둘 이상의 로컬 물리 플레이어를 허용한다면(예를 들어, 온라인 플레이어와 결합된 카우치 협동 작업), Fusion의 '플레이어' 개념과 무관하게 로컬 플레이어를 차별화하기 위한 게임별 로직이 필요할 것입니다. 여러 로컬 플레이어로부터의 모든 입력은 Fusion의 입력 시스템에 통합되어야 하며, 단일 네트워크 입력 구조를 사용하여 모든 로컬 플레이어 입력에 대한 데이터를 보유해야 합니다.

노트:'SetPlayerObject 또는 OnPlayerJoined'와 같은 PlayerRef에 의존하는 함수를 사용할 때 로컬 다중 플레이어가 있으면 추가 사용자 지정 로직이 필요합니다.

노트:서버는 호스트인 경우 최대 PlayerCount에 대한 플레이어로만 계산됩니다. 게임의 최대 플레이어 수가 10인 경우 10개의 클라이언트 플레이어와 전용 서버(호스트 이외)를 지원하여 11개의 피어를 만들 수 있습니다.

메인 화면으로

PlayerRef

PlayerRef 구조체는 값이 0에서 PlayerCount-1 사이의 인덱싱된 Fusion 플레이어/피어를 나타냅니다. 호스트(PlayerRef가 있는 서버)는 항상 PlayerRef 값이 PlayerCount-1입니다.

노트: PlayerRef 는 식별자이며, 다른 플레이어의 특정 데이터를 갖고 있지 않습니다.

노트: PlayerCount StartGameArgs passed to the NetworkRunner.StartGame() 메소드로 전달되는 StartGameArgs에 의해 정의됩니다.

메인 화면으로

플레이어 객체 정의

플레이어 객체는 게임 내 각 PlayerRefNetworkObject '아바타'와 연결할 수 있는 옵션입니다.

PlayerRef는 하나의 NetworkObject와 연결될 수 있습니다. 이 연결은 클라이언트에 자동으로 연결됩니다.

다음 메소드를 사용하여 PlayerRef <-> NetworkObject 연결을 설정합니다:

NetworkRunner.SetPlayerObject(PLayerRef, NetworkObject)

  • 서버 모드: 플레이어 객체 연결은 서버에 의해서만 설정될 수 있습니다
  • 공유 모드: 각 플레이어는 자신의 플레이어 객체 연결만 설정할 수 있으며, 해당 플레이어는 연결된 NetworkObject에 대한 상태 권한도 가지고 있어야 합니다.

다음 메소드를 사용하여 피어는PlayerRef에 연결되어 있는 NetworkObject를 얻을 수 있습니다:

NetworkRunner.TryGetPlayerObject(PlayerRef, out NetworkObject)

// On Player Joined, create and define a Player Object.
void OnPlayerJoined(PLayerRef player, NetworkRunner runner){

    if (runner.IsClient)
        return;

    var plObject = runner.Spawn(PlayerObjectPrefab);
    var plData = plObject.GetComponent<PlayerData>();

    //SetData defines the PlayerRef for that NB and a life amount.
    plData.SetData(player, 3);

    runner.SetPlayerObject(player, plObject)
}


// When desired, get the Player Object.

int GetPlayerLife(PlayerRef player){
    if (Runner.TryGetPlayerObject(player, out var plObject)){
        return plObject.GetComponent<PlayerData>().Lifes;
    }

    Debug.LogError("Player Object Not found")
    return 0;
}

각 플레이어는 하나의 플레이어 객체를 가질 수 있습니다.

메인 화면으로

상태 권한 갖기

호스트/서버 모드

상태 권한은 서버로만 제한되며, 게임 상태에 대한 상태 권한을 가진 클라이언트 플레이어는 없습니다.

호스트 모드에서 호스트 플레이어는 서버를 나타내는 상태 권한을 가집니다.

메인 화면으로

공유 모드

모든 플레이어가 객체에 대한 상태 권한을 가질 수 있으므로 권한이 분산됩니다. NetworkObject.ReleaseStateAuthority()NetworkObject.RequestStateAuthority()를 조작하거나 객체 스폰을 통해서 달성할 수 있습니다.

메인 화면으로

입력 권한 갖기

플레이어는 여러 개의 NetworkObjects에 대해 입력 권한을 가질 수 있습니다.

호스트/서버 모드

플레이어가 NetworkObject에 대한 입력 권한을 가지고 있으면 입력을 전송할 수 있으며 서버는 특정 객체에 대한 입력을 찾을 때 해당 입력을 캐치합니다. 이것이 클라이언트에서 서버로 통신하는 주요 방식입니다.

메인 화면으로

공유 모드

공유 모드에서는 입력이 사용되지 않습니다. 클라이언트는 객체에 대한 상태 권한을 가질 수 있으므로 입력을 직접 적용할 수 있습니다.

기술문서 TOP으로 돌아가기