Mirror Networking

[Mirror Networking] Command와 Rpc

오락쟁이의 블로그 2025. 1. 10. 17:40

Mirror Networking에서는 Attribute를 이용해 간편하게 Network Message를 주고 받을 수 있습니다.

 

만약 Network Message에 대해 알고 싶으시면 아래 글을 읽어 주세요.

https://orakjaengi.tistory.com/entry/Mirror-Networking-Network-Message%EB%9E%80

 

[Mirror Networking] Network Message란?

목차 1. Network Message란? 2. Network Message 사용법  2-1. NetworkMessage를 상속하는 구조체 혹은 클래스를 생성  2-2. 서버나 클라이언트에서 메시지를 등록  2-3. 메시지에 데이터를 담고 메시지를 발송  2

orakjaengi.tistory.com

 

목차
1. Command
2. ClientRpc
3. TargetRpc
4. 정리

 

Command

설명

  • 클라이언트에서 서버로 메시지를 보낼 때 사용합니다.
  • 클라이언트가 서버에서 처리해야 할 작업을 요청하거나 데이터를 전달할 때 사용됩니다.
  • 해당 메서드는 서버에서만 실행되며, 클라이언트가 호출할 수 있습니다.
  • 해당 메서드를 호출할 객체가 현재 클라이언트가 직접 소유하고 제어하는 권한(authority)을 가진 객체(예: 로컬플레이어)여야 호출할 수 있습니다.
  • 만약 권한이 클라이언트에서 권한을 가지고 있지 않은 객체에서 Command를 호출하고 싶으시면
    [Command(requiresAuthority = false)]
    를 사용하시면 됩니다.

 

사용 상황

  • 클라이언트에서 서버로 게임 데이터를 전송할 때 사용합니다.
  • 서버에서 특정 로직(예: 게임 상태 업데이트)을 처리해야 할 때 사용합니다.
[Command]
public void CmdMethod(string newStr)
{
    // 매개변수로 데이터를 전달
    // 서버에서 수행할 로직
}

 

ClientRpc

설명

  • 서버에서 모든 클라이언트로 메시지를 전송할 때 사용됩니다.
  • 클라이언트에서 실행해야 하는 메서드를 서버에서 호출합니다.
  • 모든 클라이언트가 해당 메시지를 받습니다.

사용 상황

  • 서버에서 모든 클라이언트의 UI를 동기화할 때 사용합니다.
  • 모든 클라이언트가 알아야 할 이벤트(예: 게임 종료)를 알릴 때 사용합니다.
[ClientRpc]
public void RpcMethod(int newInt)
{
    // 매개변수로 데이터를 전달
    // 클라이언트에서 실행할 로직
}

 

TargetRpc

설명

  • 서버에서 특정 클라이언트로만 메시지를 전송할 때 사용됩니다.
  • [ClientRpc]와 비슷하지만, 특정 클라이언트만 메시지를 수신합니다.
  • 서버에서 대상을 지정해 호출해야 합니다.

사용 상황

  • 특정 클라이언트에게만 UI 업데이트를 요청할 때 사용합니다.
  • 특정 클라이언트만 알아야 하는 정보를 전달할 때 사용합니다.
[TargetRpc]
public void TargetMethod(NetworkConnection target, string message)
{
    // 매개변수로 메시지를 보낼 클라이언트와 전달할 데이터를 표시
    // 특정 클라이언트에서 실행할 로직
}

 

정리

Attribute 동작 방향 대상 주요 사용 목적
Command 클라이언트 >> 서버 서버 게임 상태 업데이트
ClientRpc 서버 >> 모든 클라이언트 모든 클라이언트 UI 동기화
TargetRpc 서버 >> 특정 클라이언트 특정 클라이언트 개인 메시지