목차
1. Network Message란?
2. Network Message 사용법
2-1. NetworkMessage를 상속하는 구조체 혹은 클래스를 생성
2-2. 서버나 클라이언트에서 메시지를 등록
2-3. 메시지에 데이터를 담고 메시지를 발송
2-4. 통합
Network Message란?
Network Message는 Mirror Networking에서 클라이언트와 서버 간 데이터를 전송하기 위한 기본 단위입니다. 이를 통해 게임의 네트워크 시스템에서 특정 데이터를 주고받을 수 있습니다. 예를 들어, 플레이어의 입력, 상태 정보, 또는 게임 이벤트를 전달하는 데 사용됩니다.
Network Message 사용법
1. NetworkMessage를 상속하는 구조체 혹은 클래스를 생성
메시지 크기가 작고, 가비지 컬렉션에 가해지는 부하가 적은 구조체를 사용하시는 것을 권장드립니다.
using Mirror;
using UnityEngine;
using System;
public struct MyNetworkMessage : NetworkMessage
{
public int i;
public string str;
}
2. 서버나 클라이언트에서 메시지를 등록
NetworkServer나 NetworkClient에서 RegisterHandler 혹은 ReplaceHandler를 사용해서 메시지를 등록합니다. 메시지를 등록할 때는 메시지를 수신했을 때 메시지를 처리할 핸들러도 등록해야 합니다.
서버에서 핸들러를 등록할 때는 NetworkConnection과 수신할 메시지를 매개변수로 설정해야 합니다.
클라이언트에서 핸들러를 등록할 때는 수신할 메시지를 매개변수로 설정해야 합니다.
using Mirror;
using UnityEngine;
using System;
public class MyNetworkClass : NetworkBehaviour
{
int myInt = 0;
string myStr = String.Empty;
public override void OnStartServer()
{
base.OnStartServer();
// 서버에서 MyNetworkMessage를 수신 받을 경우 ReceiveMyNetworkMessageInServer를 호출
// RegisterHandler: 기존 핸들러가 없을 때만 작동하며, 중복 등록을 시도하면 오류가 발생
NetworkServer.RegisterHandler<MyNetworkMessage>(ReceiveInServer);
}
public override void OnStartClient()
{
base.OnStartClient();
// 클라이언트에서 MyNetworkMessage를 수신 받을 경우 ReceiveMyNetworkMessageInClient를 호출
// ReplaceHandler: 기존 핸들러가 있든 없든 상관없이 무조건 새로운 핸들러로 설정
NetworkClient.ReplaceHandler<MyNetworkMessage>(ReceiveInClient);
}
private void ReceiveInServer(NetworkConnection conn, MyNetworkMessage message)
{
// 메시지를 처리할 코드
i = message.i;
}
private void ReceiveInClient(MyNetworkMessage message)
{
// 메시지를 처리할 코드
myStr = message.str;
}
public struct MyNetworkMessage : NetworkMessage
{
public int i;
public string str;
}
}
3. 메시지에 데이터를 담고 메시지를 발송
서버에서 클라이언트에게 메시지를 발송: 특정 NetworkConnection.Send(메시지);
클라이언트에서 서버에게 메시지를 발송: NetworkClient.Send(메시지);
using Mirror;
using UnityEngine;
using System;
public class MyNetworkClass : NetworkBehaviour
{
private void SendServerToClient(NetworkConnection conn, int newInt, string newStr)
{
message = new MyNetworkMessage
{
i = newInt,
str = newStr
};
conn.Send(message);
}
private void SendClientToServer(int newInt, string newStr)
{
message = new MyNetworkMessage
{
i = newInt,
str = newStr
};
NetworkClient.Send(message);
}
public struct MyNetworkMessage : NetworkMessage
{
public int i;
public string str;
}
}
4. 통합
using Mirror;
using UnityEngine;
using System;
public class MyNetworkClass : NetworkBehaviour
{
int myInt = 0;
string myStr = String.Empty;
public override void OnStartServer()
{
base.OnStartServer();
// 서버에서 MyNetworkMessage를 수신 받을 경우 ReceiveMyNetworkMessageInServer를 호출
// RegisterHandler: 기존 핸들러가 없을 때만 작동하며, 중복 등록을 시도하면 오류가 발생
NetworkServer.RegisterHandler<MyNetworkMessage>(ReceiveInServer);
}
public override void OnStartClient()
{
base.OnStartClient();
// 클라이언트에서 MyNetworkMessage를 수신 받을 경우 ReceiveMyNetworkMessageInClient를 호출
// ReplaceHandler: 기존 핸들러가 있든 없든 상관없이 무조건 새로운 핸들러로 설정
NetworkClient.ReplaceHandler<MyNetworkMessage>(ReceiveInClient);
}
private void ReceiveInServer(NetworkConnection conn, MyNetworkMessage message)
{
// 메시지를 처리할 코드
i = message.i;
}
private void ReceiveInClient(MyNetworkMessage message)
{
// 메시지를 처리할 코드
myStr = message.str;
}
private void SendServerToClient(NetworkConnection conn, int newInt, string newStr)
{
message = new MyNetworkMessage
{
i = newInt,
str = newStr
};
conn.Send(message);
}
private void SendClientToServer(int newInt, string newStr)
{
message = new MyNetworkMessage
{
i = newInt,
str = newStr
};
NetworkClient.Send(message);
}
public struct MyNetworkMessage : NetworkMessage
{
public int i;
public string str;
}
}'Mirror Networking' 카테고리의 다른 글
| [Mirror Networking] SyncVar (0) | 2025.01.10 |
|---|---|
| [Mirror Networking] Command와 Rpc (0) | 2025.01.10 |
| [Mirror Networking] 네트워크 객체의 서버 및 클라이언트 상태 관리 (0) | 2025.01.09 |
| [Mirror Networking] Network Manager란? (0) | 2025.01.08 |
| [Mirror Networking] 유니티 Mirror Networking 사전 지식 (0) | 2025.01.08 |