누가 누구?
Bolt에서는 네트워킹에서 익숙하지 않다면 좀 더 공부를 해야할 전문용어를 사용할 것 입니다.
우선, 서버, 클라이언트, 연결, 소유자, 컨트롤러 와 프록시 에 대해서 살펴보도록 하겠습니다.
네트워크
서버
서버는 게임을 호스팅하고 있는 연결입니다.
만약 서버가 신뢰성있는 서버 이면, 서버는 (대부분의) BoltEntity들의 소유자이기도 할 것 입니다.
클라이언트
일반적으로 클라이언트는 서버로 간주되지 않는 게임에 접속하는 모든 것을 말합니다.
간단히 서버의 모든 원격 연결은 클라이언트입니다.
연결
Bolt에서의 연결 은 네트워크상의 또 다른 클라이언트/서버 의 연결로 간주됩니다.
이 의미는 연결 은 클라이언트 또는 서버 로 언급할 수 있습니다.
서버 가 자신의 연결을 체크하는 경우, 데이터의 송신/전송이 필요한 원격 링크가 없으므로 null
일 것입니다.
엔티티
소유자
엔티티의 생성자가 소유자 입니다.
엔티티의 소유자라고 간주하면 (기본적으로) 엔티티에 대한 모든 권한을 가집니다.
신뢰성있는 서버 의 경우에는 (대부분의) BoltEntity들은 서버 가 소유를 할 것 입니다.
Bolt의 인스턴스화된 객체는 (BoltNetwork.Instantiate()
를 통해) 생성된 BoltEntity의 소유자로 생각합니다.
따라서 소유권은 필요한 연결상에서 인스턴스화에 의해 소유권을 설정할 수 있습니다.
로컬 머신이 엔티티의 소유자 인지를 체크하고 싶으면 entity.isOwner
를 사용합니다.
컨트롤러
엔티티는 서버 또는 원격플레이어에게 모두 제어됩니다.
서버와 클라이언트 모두 BoltEntity의 제어권을 얻을 수 있습니다. 제어는 객체 소유자에게만 주어집니다. 기본적으로 엔티티들에게는 할당된 컨트롤러가 없습니다.
소유자는 제어권 가져오기 를 entity.TakeControl()
을 통해 할 수 있습니다.
또 다른 클라이언트는 제어권 지정 을 entity.AssignControl(connection)
을 통해 할 수 있습니다.
대부분의 시나리오에서 서버는 소유자이므로 서버가 제어권을 받고 다른 클라이언트는 제어권이 지정 된다고 읽는 경우가 많이 있으니 참고하세요.
로컬 머신이 엔티티의 제어권을 가지고 있는지 를 체크하기 위해서, entity.hasControl
를 사용합니다.
특정 연결이 엔티티를 제어하고 있는지 를 확인하려면 entity.IsController(connection)
를 사용합니다.
프록시
엔티티는 기본적으로 로컬에서 제어되지 않는 더미 로, 엔티티는 복제된 꼭두각시일 뿐 입니다.
BoltEntity는 소유자 또는 컨트롤러가 아니면 연결/게임 내에서 프록시로 간주됩니다.
논리적인 것처럼 보일 수도 있지만 클라이언트의 프록시 BoltEntity가 다른 연결(소유자/컨트롤러인 대신)상에 있지 않다는 것을 명심하는 것이 중요합니다.
엔티티가 프록시인지를 체크하기위해서 (!entity.hasControl && !entity.isOwner)
를 사용합니다.