Version: 2017.3
네트워킹 개념의 개요(레거시)
네트워크 뷰(레거시)

Unity의 네트워킹 요소(레거시)

(새 프로젝트에는 5.1에서 도입된 새로운 네트워킹 시스템을 사용해야 합니다. 다음 내용은 이전 네트워킹 시스템을 사용하는 레거시 프로젝트를 대상으로 작성되었습니다.)

Unity 네이티브 네트워킹은 이전 페이지에서 언급된 모든 사항을 지원합니다. 서버 생성, 클라이언트 연결, 연결된 클라이언트 간의 데이터 공유, 특정 오브젝트를 제어하는 플레이어 결정, 네트워크 설정 배리에이션 펀치스루 모두 즉시 사용할 수 있도록 지원됩니다. 이 페이지에서는 이러한 네트워킹 작업에 대한 Unity만의 구현 방식에 대해 설명합니다.

서버 생성

네트워크 게임플레이를 시작하기 전에 서로 통신할 다른 컴퓨터를 결정해야 합니다. 이렇게 하려면 서버를 생성해야 합니다. 서버는 게임을 실행하는 시스템일 수도 있으며, 게임에는 참여하지 않는 전용 시스템일 수도 있습니다. 서버를 생성하려면 스크립트에서 Network.InitializeServer()를 호출하면 됩니다. 클라이언트로 기존 서버에 연결하려면 대신 Network.Connect()를 호출하면 됩니다.

일반적으로 네트워크 클래스 전체를 숙지하면 매우 유용합니다.

네트워크 뷰를 사용한 통신

Network View 는 네트워크에서 데이터를 전송하는 컴포넌트입니다. 네트워크 뷰를 통해 게임 오브젝트가 RPC 호출이나 상태 동기화를 사용하여 데이터를 전송할 수 있습니다. 네트워크 뷰를 사용하는 방법은 게임의 네트워크 동작의 작동 방식을 결정합니다. 네트워크 뷰에는 몇 개의 옵션이 있으며, 이 옵션은 네트워크 게임에 아주 중요합니다.

네트워크 뷰를 사용하는 방법에 대한 자세한 내용은 네트워크 뷰 가이드 페이지컴포넌트 레퍼런스 페이지를 참조하십시오.

원격 프로시저 호출

원격 프로시저 호출(RPC)은 네트워크 뷰를 포함하는 게임 오브젝트에 연결된 스크립트로 선언되는 함수입니다. 네트워크 뷰에는 RPC 함수를 포함하는 스크립트를 지정해야 합니다. 이렇게 해야 게임 오브젝트의 모든 스크립트에서 RPC 함수를 호출할 수 있습니다.

Unity에서 RPC를 사용하는 방법에 대한 자세한 내용은 RPC 세부 정보 페이지를 참조하십시오.

상태 동기화

상태 동기화는 모든 게임 클라이언트에서 데이터를 지속적으로 공유하는 것입니다. 따라서 플레이어의 포지션을 모든 클라이언트에 동기화할 수 있으므로 데이터가 네트워크에서 전달될 때 로컬로 제어되는 것처럼 보입니다. 게임 오브젝트의 상태를 동기화하려면 오브젝트에 NetworkView를 추가한 후 무엇을 관찰할지 설정해야 합니다. 이렇게 하면 관찰된 데이터가 게임의 모든 클라이언트에서 동기화됩니다.

Unity에서 상태 동기화를 사용하는 방법에 대한 자세한 내용은 상태 동기화 페이지를 참조하십시오.

Network.Instantiate()

Network.Instantiate() 를 사용하여 모든 클라이언트 프리팹을 자연스럽고 쉽게 인스턴스화할 수 있습니다. 기본적으로 이는 Instantiate() 호출이지만 모든 클라이언트에서 인스턴스화를 수행합니다.

내부적으로 Network.Instantiate는 모든 클라이언트에서 로컬로 실행되는 버퍼링된 RPC 호출입니다. 이는 NetworkViewID를 할당하여 인스턴스화된 프리팹에 할당하며, 이렇게 하면 모든 클라이언트에서 올바르게 동기화할 수 있습니다.

자세한 내용은 네트워크 인스턴스화 페이지를 참조하십시오.

NetworkLevelLoad()

공유 데이터, 클라이언트 플레이어 상태, 레벨 로딩을 처리하는 것은 상당한 부담이 됩니다. 네트워크 레벨 로드 페이지에 이러한 작업을 관리하는 것과 관련하여 유용한 예제가 있습니다.

마스터 서버

마스터 서버 는 게임 매칭을 지원합니다. 서버를 시작할 때 마스터 서버에 연결하면 활성화된 모든 서버의 리스트가 제공됩니다.

마스터 서버 는 서버와 클라이언트가 만나는 장소로, 서버가 자신을 알리면 호환되는 모든 클라이언트에서 실행 중인 게임에 연결할 수 있습니다. 관련된 모든 당사자의 IP 주소를 찾지 않더라도 게임을 실행할 수 있습니다. 또한 일반적으로 게임을 호스팅하려면 라우터 설정을 변경해야 하지만, 그렇게 하지 않아도 호스팅할 수 있도록 지원합니다. 클라이언트가 서버의 방화벽을 우회하고 공용 인터넷을 통해서 접근할 수 없는 사설 IP 주소를 얻을 수 있도록 지원하기도 합니다. 이는 연결 구축을 지원하는 퍼실리테이터 를 통해 이루어집니다.

자세한 내용은 마스터 서버 페이지를 참조하십시오.

대역폭 최소화

대역폭 소모를 최소화하여 게임이 올바르게 작동하도록 하는 것은 아주 중요한 일입니다. 다양한 메서드를 사용하여 데이터를 주고받을 수 있으며, 언제 무엇을 주고받을지 결정할 수 있습니다.

대역폭 사용을 줄이는 팁과 요령은 대역폭 최소화 페이지를 참조하십시오.

네트워크 게임 디버깅

Unity는 네트워크 게임을 디버깅하는 데 도움이 되는 몇 가지 기능을 제공합니다.

  1. 네트워크 관리자는 모든 네트워크 트래픽 출입을 로깅하는 데 사용할 수 있습니다.
  2. 인스펙터 및 계층 구조 뷰를 사용하면 오브젝트 생성 추적과 뷰 ID 검사 등을 효율적으로 진행할 수 있습니다.
  3. Unity를 동일한 컴퓨터에서 두 번 실행한 후 각각 다른 프로젝트를 열 수도 있습니다. Windows에서는 간단히 다른 Unity 인스턴스를 실행한 후 프로젝트 마법사에서 프로젝트를 열면 됩니다. Mac OS X에서는 여러 Unity 인스턴스를 터미널에서 연 후 -projectPath 인수를 다음과 같이 지정하면 됩니다. /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyProjectFolder/” /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyOtherProjectFolder/”

네트워킹을 디버깅하는 경우 플레이어는 백그라운드에서 실행되어야 합니다. 예를 들어 동시에 두 개의 인스턴스를 실행하는 경우 둘 중 하나에는 포커스가 없기 때문입니다. 이렇게 하면 네트워킹 루프가 차단되고 원하지 않는 결과가 발생할 수 있습니다. 에디터의 Edit->Project Settings->Player에서 활성화하거나, 또는 Application.runInBackground를 사용하여 활성화할 수 있습니다.

네트워킹 개념의 개요(레거시)
네트워크 뷰(레거시)