Unity 네트워킹 API - Network Identity 컴포넌트
개요
Network Identity 컴포넌트는 Unity의 네트워킹 고수준 API에서 중요한 역할을 하는 요소입니다. 이 컴포넌트는 게임 오브젝트의 고유 ID를 설정하고, 이를 통해 네트워킹 시스템이 게임 오브젝트를 인식할 수 있도록 합니다. UNet은 이제 지원이 중단된 기술이며, 새로운 멀티플레이어 솔루션인 Netcode for GameObjects가 개발 중입니다.
주요 사항
- 서버 전용: 만약 게임 오브젝트가 서버에서만 생성되도록 하려면 "Server Only" 체크박스를 선택합니다.
- 로컬 플레이어 권한: 클라이언트에 네트워크 제어 권한을 줄 때 "Local Player Authority" 체크박스를 선택합니다.
인스턴스화된 네트워크 오브젝트
서버 권한이 있는 네트워킹 시스템을 사용할 경우, 서버는 NetworkServer.Spawn을 통해 네트워크 ID가 할당된 네트워크 게임 오브젝트를 생성해야 합니다. 이 방식으로 생성된 오브젝트는 자동으로 서버에 연결된 클라이언트에 생성됩니다.
프리팹 사용
런타임에 사용될 프리팹에는 반드시 Network Identity 컴포넌트를 포함해야 합니다. 씬 기반 게임 오브젝트도 네트워크에 연결할 수 있으며, 이를 통해 전체 네트워크에 걸쳐 오브젝트가 생성됩니다.
Network Identity 컴포넌트 속성 설명
| 프로퍼티 | 설명 |
|---|---|
assetId |
오브젝트와 연관된 프리팹을 식별합니다. |
clientAuthorityOwner |
오브젝트에 대한 권한이 있는 클라이언트입니다. 권한이 없는 경우 null입니다. |
connectionToClient |
NetworkIdentity와 연관된 NetworkConnection입니다. 서버의 플레이어 오브젝트에만 유효합니다. |
connectionToServer |
NetworkIdentity와 연관된 NetworkConnection입니다. 로컬 클라이언트의 플레이어 오브젝트에만 유효합니다. |
hasAuthority |
해당 오브젝트가 권한이 있는 경우 true입니다. |
isClient |
오브젝트가 클라이언트에서 실행 중인 경우 true입니다. |
isLocalPlayer |
오브젝트가 로컬 컴퓨터에서 플레이어를 나타내면 true를 반환합니다. |
isServer |
오브젝트가 서버에서 실행 중이고 스폰된 경우 true입니다. |
localPlayerAuthority |
오브젝트를 소유한 클라이언트가 오브젝트를 제어하는 경우 true입니다. |
netId |
네트워크 세션에서 스폰될 때 할당된 고유 식별자입니다. |
observers |
오브젝트를 볼 수 있는 클라이언트 NetworkConnections의 리스트입니다. |
playerControllerId |
오브젝트와 연관된 컨트롤러의 식별자입니다. |
sceneId |
씬에 있는 네트워크 오브젝트의 고유 식별자입니다. 재생 모드에서만 입력됩니다. |
serverOnly |
이 오브젝트가 클라이언트에서 스폰되지 않게 하는 플래그입니다. |
활용 예제
1. 서버 전용 오브젝트 생성
public class GameManager : NetworkBehaviour {
public GameObject playerPrefab;
void Start() {
if (isServer) {
GameObject player = Instantiate(playerPrefab);
NetworkServer.Spawn(player);
}
}
}
2. 클라이언트 권한 설정
public class PlayerController : NetworkBehaviour {
void Start() {
if (isLocalPlayer) {
GetComponent<NetworkIdentity>().localPlayerAuthority = true;
}
}
}
3. 글로 나오는 객체 연결
public class ObjectSpawner : NetworkBehaviour {
public GameObject objectPrefab;
void CmdSpawnObject() {
GameObject obj = Instantiate(objectPrefab);
NetworkServer.Spawn(obj);
}
}
이 문서는 Network Identity 컴포넌트를 이해하고 활용하는 데 도움이 될 것입니다. Unity의 멀티플레이어 네트워킹 솔루션에 대한 추가 정보는 Unity 공식 웹사이트를 참조하시기 바랍니다.