Important: UNet is a deprecated solution, and a new Multiplayer and Networking Solution (MLAPI) is under development. For more information and next steps see the information on the Unity MLAPI website. |
빌트인 Network Proximity Checker 컴포넌트는 게임 오브젝트의 네트워크 가시성을 확인하기 위한 빌트인 기본 컴포넌트입니다. 하지만 이 컴포넌트는 거리 기반 확인만 제공합니다. 때에 따라 사용자는 그리드 기반 규칙, 가시선(line-of-sight) 테스트, 내비게이션 경로 테스트 또는 게임에 필요한 기타 타입의 테스트 등을 비롯하여 다른 타입의 가시성 확인을 사용해야 합니다.
이를 위해 네트워크 근접성 검사기의 고유 커스텀 버전을 구현할 수 있습니다. 그렇게 하려면 네트워크 근접성 검사기의 동작 원리를 이해해야 합니다. 에디터 내 Network Proximity Checker 컴포넌트 및 NetworkProximityChecker API에 대한 문서를 참조하십시오.
네트워크 근접성 검사기는 Unity 멀티플레이어 HLAPI의 공용 가시성 인터페이스를 사용하여 구현됩니다. 이와 동일한 인터페이스를 사용하여 원하는 모든 가시성 규칙을 구현할 수 있습니다. 각각의 NetworkIdentity는 플레이어가 볼 수 있는 오브젝트 집합을 계속 추적합니다. NetworkIdentity 게임 오브젝트가 표시되는 플레이어는 NetworkIdentity의 “관찰자”라고 부릅니다.
네트워크 근접성 검사기는 일정한 간격(인스펙터의 “Vis Update Interval” 값을 사용하여 설정)으로 Network Identity 컴포넌트의 RebuildObservers** **메서드를 호출합니다. 따라서 플레이어가 돌아다닐 때마다 각 플레이어에 대한 네트워크 표시 게임 오브젝트의 집합이 업데이트됩니다.
NetworkBehaviour`** **클래스(여기에서 네트워크에 연결된 스크립트가 상속받음)에는 가시성을 결정하기 위한 다음과 같은 가상 함수가 있습니다.
OnCheckObserver - 이 메서드는 서버에서 새로운 플레이어가 게임에 참가할 때 네트워크로 연결된 각 게임 오브젝트에서 호출됩니다. true를 반환하면 해당 플레이어가 오브젝트의 관찰자에 추가됩니다. NetworkProximityChecker
는 이 함수를 구현하기 위해 단순한 거리 검사를 수행하고, Physics.OverlapSphere()
를 사용하여 해당 오브젝트의 가시성 범위에 있는 플레이어를 검색합니다.
OnRebuildObservers - RebuildObservers
가 호출되면 이 메서드가 서버에서 호출됩니다. 이 메서드는 오브젝트를 볼 수 있는 플레이어로 채워질 관찰자 집합을 요구합니다. 이후 NetworkServer는 기존 가시성 집합과 새로운 가시성 집합 간 차이점에 기반하여 ObjectHide
및 ObjectSpawn
메시지 전송을 처리합니다.
해당 NetworkIdentity
에 유효한 connectionToClient가 있는지 검사하면 네트워크로 연결된 특정 게임 오브젝트가 플레이어인지 확인할 수 있습니다.
var hits = Physics.OverlapSphere(transform.position, visRange);
foreach (var hit in hits)
{
// (if a GameObject has a connectionToClient, it is a player)
var uv = hit.GetComponent<NetworkIdentity>();
if (uv != null && uv.connectionToClient != null)
{
observers.Add(uv.connectionToClient);
}
}