}

유니티 Player Object 개념 이해!

PlayerRef와 NetworkObject

  • PlayerRef는 세션에 참여 중인 각 플레이어를 식별하는 핸들러이며, NetworkObject는 네트워크를 통해 동기화되는 게임 오브젝트를 의미합니다.
  • "Player Object(플레이어 오브젝트)"란 각 플레이어가 자신의 아바타로 사용할 NetworkObject를 고정해 두는 편의 기능으로, 설정된 매핑은 자동으로 모든 클라이언트에 복제됩니다.

NetworkRunner.SetPlayerObject

 

  • SetPlayerObject(PlayerRef player, NetworkObject networkObject)는 지정된 플레이어와 네트워크 오브젝트를 연관 짓습니다.
  • 이 호출은 네트워크 이벤트로 전파되어, 다른 클라이언트에서도 TryGetPlayerObject를 통해 동일한 오브젝트를 참조할 수 있게 합니다.
// 플레이어 입장 시 아바타 생성 및 매핑 예제
void OnPlayerJoined(PlayerRef player, NetworkRunner runner) {
    // 서버 권한 확인 (Shared Mode일 때)
    if (!Object.HasStateAuthority) return; 

    // 아바타 프리팹 스폰
    var playerAvatar = runner.Spawn(PlayerAvatarPrefab);
    
    // State Authority를 아바타에 요청
    playerAvatar.RequestStateAuthority(player);

    // 플레이어 ↔ 아바타 매핑 설정
    runner.SetPlayerObject(player, playerAvatar);
}

 

 


NetworkRunner.TryGetPlayerObject

TryGetPlayerObject(PlayerRef player, out NetworkObject networkObject)는 지정된 플레이어에 연관된 오브젝트를 반환하며, 연결이 없을 경우 false를 반환합니다.

// 플레이어 생명 수 조회 예제
int GetPlayerLife(PlayerRef player) {
    if (Runner.TryGetPlayerObject(player, out var plObject)) {
        return plObject.GetComponent<PlayerData>().Life;
    }
    Debug.LogWarning("플레이어 오브젝트를 찾을 수 없음");
    return 0;
}