빌트인 Network Proximity Checker 컴포넌트는 게임 오브젝트의 네트워크 가시성을 확인하기 위한 기본적인 빌트인 컴포넌트입니다. 하지만 이 컴포넌트는 거리 기반 확인만 제공합니다. 때에 따라 사용자는 그리드 기반 규칙, 시야 테스트, 내비게이션 경로 테스트 또는 게임에 필요한 기타 타입의 테스트 등을 비롯하여 다른 타입의 가시성 확인을 사용해야 합니다.
이를 위해 네트워크 근접성 검사기의 고유 커스텀 버전을 구현할 수 있습니다. 그렇게 하려면 네트워크 근접성 검사기의 동작 원리를 이해해야 합니다. 에디터 내 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);
}
}