Unity 네트워킹 매뉴얼 해설
이 문서는 Unity의 네트워킹 시스템을 사용하여 멀티플레이어 게임을 구축하기 위한 API를 설명합니다. 특히 NetworkBehaviour 클래스와 관련된 다양한 기능과 메서드에 대해 다룹니다. 이와 함께 사용 예도 포함되어 있습니다.
중요한 사항
- UNet은 더 이상 지원되지 않으므로, 새로운 멀티플레이어 솔루션인 게임 오브젝트용 넷코드를 사용하는 것이 좋습니다.
NetworkBehaviour스크립트는 반드시Network Identity컴포넌트가 있는 게임 오브젝트와 연결되어야 합니다.
기본 개념
NetworkBehaviour
NetworkBehaviour는 네트워크 기능을 가진 게임 오브젝트에 스크립트를 추가할 때 사용하는 기본 클래스입니다. 이 클래스를 상속받은 스크립트를 작성해야 합니다.
프로퍼티 설명
| 프로퍼티 | 설명 |
|---|---|
isLocalPlayer |
게임 오브젝트가 로컬 클라이언트를 나타낼 경우 true를 반환합니다. |
isServer |
게임 오브젝트가 서버에서 실행 중일 경우 true를 반환합니다. |
isClient |
게임 오브젝트가 클라이언트에서 실행 중일 경우 true를 반환합니다. |
hasAuthority |
게임 오브젝트가 권한을 가진 경우 true를 반환합니다. |
netId |
게임 오브젝트의 고유 네트워크 ID입니다. |
playerControllerId |
NetworkBehaviour 스크립트와 연결된 플레이어의 ID입니다. |
connectionToServer |
게임 오브젝트와 연결된 NetworkConnection입니다. |
connectionToClient |
클라이언트의 플레이어 게임 오브젝트와 연결된 NetworkConnection입니다. |
localPlayerAuthority |
이 값은 Network Identity 컴포넌트에서 설정됩니다. |
주요 기능
동기화된 변수
SyncVar 속성을 사용하여 멤버 변수를 서버와 클라이언트 간에 동기화할 수 있습니다.
public class SpaceShip : NetworkBehaviour
{
[SyncVar]
public int health;
[SyncVar]
public string playerName;
}
서버에서 SyncVar 값이 변경될 경우, 자동으로 클라이언트에 새 값을 전송합니다.
네트워크 콜백
네트워크 이벤트에 대해 기본적으로 제공되는 콜백 함수가 있습니다.
OnStartServer: 게임 오브젝트가 서버에서 스폰될 때 호출됩니다.OnStartClient: 클라이언트에서 게임 오브젝트가 스폰될 때 호출됩니다.OnNetworkDestroy: 서버에서 게임 오브젝트를 삭제할 때 클라이언트에서 호출됩니다.
예제:
public class SpaceShip : NetworkBehaviour
{
public override void OnStartServer()
{
// 클라이언트 관련 기능 비활성화
}
public override void OnStartClient()
{
// 클라이언트 이벤트 등록
}
}
Server 및 Client 함수
함수를 Server 또는 Client 속성으로 태그하여 특정 기능을 달성할 수 있습니다.
[Server]
public void TakeDamage(int amount)
{
// 서버 전용 코드
}
클라이언트에서 커맨드를 전송하려면 다음과 같은 형식의 함수를 사용해야 합니다:
[Command]
public void CmdThrust(float thrusting, int spin)
{
// 서버에서 실행
}
클라이언트 RPC 호출
서버에서 클라이언트 측 작업을 수행하기 위해 RPC 호출을 사용할 수 있습니다.
[ClientRpc]
public void RpcDoOnClient(int foo)
{
// 모든 클라이언트에서 실행
}
이벤트 기반 시스템
네트워크 이벤트를 사용하여 유연한 시스템을 구축할 수 있습니다.
[SyncEvent]
public event TakeDamageDelegate EventTakeDamage;
요약
Unity의 네트워킹 기능을 사용하여 멀티플레이어 게임을 구축하는 과정에서 NetworkBehaviour, SyncVar, RPC 호출 등을 활용하여 서버와 클라이언트 간의 원활한 연결과 이벤트 관리를 수행할 수 있습니다. 이 문서를 바탕으로 자신만의 멀티플레이어 기능을 개발해 보세요.