유니티 Network 개념 정리

2017-10-24

NetworkBehaviour 클래스

NetworkBehavior 클래스는 MonoBehaviour를 상속받은 클래스로써, 네트워크에 관련된 기능을 사용하려는 스크립트에서 MonoBehaviour 대신 상속받습니다.

public class BallOnNetwork : NetworkBehavior {
    ...

NetworkBehaviour를 사용하면 좋은 점을 정리 해보았습니다.

  • 네트워크 관련 여러 액션 수행
  • 네트워크 관련 콜백 호출 가능
  • 자동으로 서버와 클라이언트 간 동기화

NetworkBehaviour를 사용하기 위해서는 NetworkIdentity라는 컴포넌트가 필요하다고 합니다.


NetworkIdentity 컴포넌트

NetworkIdentity는 지극히 단순한 컴포넌트입니다. 네트워크 내에서 특정 GameObject를 구분하기 위해서 필요하죠. 서버는 NetworkIdentity를 가지고 있는 GameObject를 생성할 때, NetworkIdentity.NetworkInstanceId를 새로 할당하고 이를 클라이언트에서 설정하게 됩니다. 일종의 주민등록번호라고 생각하면 좋을 것 같네요.

기본적으로 네트워크가 들어가는 게임에서, 네트워크 액션(서버 생성, 클라이언트 접속 등)에 따라 GameObject를 제어하기 위해서는 이 NetworkIdentity 컴포넌트가 꼭 필요합니다. 조금 전에 언급한 NetworkBehaviour를 사용하기 위해서도 필요하다는 걸 확인했습니다.


NetworkTransform 컴포넌트

NetworkTransform은 네트워크 상에서 오브젝트의 움직임을 동기화하기 위해서 필요한 컴포넌트입니다. 이 컴포넌트가 없으면 로컬에서 내가 플레이어를 움직여도 상대방의 화면에서는 가만히 있는 것처럼 보이게 되죠.

누가 권한을 가지느냐에 따라서 두 가지 방식으로 동작합니다.

  • Authority on Client

    클라이언트가 제어를 하고, 변경 사항이 서버로 전송되어 반영된 후 다시 다른 클라이언트로 뿌려집니다. 일반적인 플레이어 오브젝트가 이에 해당하죠. (각 클라이언트 별로 고유)

  • Authority on Server

    서버가 제어를 하고, 변경 사항이 연결된 클라이언트들에게 뿌려집니다. 중립 몬스터와 같이 공통적으로 적용되는 것들에게 적합할 것 같네요.


참고 자료