Unity Fishnet[3] Observer

2025. 7. 21. 15:48·유니티/Tutorial

Unity 6000.0.51f 환경에서 진행했고 멀티를 테스트할 수 있는 에셋은 ParrelSync를 사용했습니다.


Observer

Observer는 특정 조건 (오브젝트 거리, 같은 씬에 있는지, owner 인지 등)에 만족해야 네트워크 오브젝트들이 보이면서 네트워크 기능을 이용할 수 있게 해주는 기능입니다.

이걸 사용하는 이유는 최적화 때문인데 예를 들어 내 화면에 없는 네트워크 오브젝트는 보여줄 필요가 없으니 삭제하고 내 화면에 들어왔을 때 다시 소환하는 방식으로 최적화가 이루어집니다.

저는 LOD와 비슷하다는 느낌을 받은 기능입니다.


 Observer  미리보기

먼저 특정 조건 (오브젝트 거리, 같은 씬에 있는지, owner 인지 등)을 활용해서 Observer가 뭔지 직접 확인해 보겠습니다.

왼쪽 : 호스트, 오른쪽 : 클라이언트

위 영상은 Observer Condition를 Distance Condition으로 했을 때 나타나는 결과입니다.

거리는 마음대로 조절할 수 있는데 저는 1로 설정해 놨습니다.

클라이언트의 경우엔 내 네트워크 오브젝트와 다른 네트워크 오브젝트 간 거리가 n이상 차이 날 경우 다른 네트워크 오브젝트가 아예 파괴돼버리는 걸 볼 수 있습니다.

 

근데 호스트 같은 경우엔 좀 다른데 아예 파괴되는 것이 아니라 Renderer만 disable 해서 다른 플레이어의 그래픽만 안 보이게끔 해놨습니다.

 

왜 그럴까 추측건대 서버는 항상 모든 네트워크의 정보를 가지고 있어야 합니다.

위 사진처럼 플레이어가 파괴되어도 실제로 접속이 끊어진 건 아닙니다.

서버가 원본 데이터를 남겨두고 Observer Condition를 만족했을 때 조건을 만족한 오브젝트를 생성해라고 클라이언트에 명령을 내려야 다른 플레이어가 다시 생성됩니다.

그래서 클라이언트 겸 서버인 호스트에선 서버에서 어떤 일이 벌어지는지 시각적으로 보여준다고 생각합니다.


 ObserverManager, NetworkObserver

Network Manager와 같이 붙어 있는 ObserverManager는 게임 전체 Observer를 관할합니다.

Update Host Visibility False면 호스트에서 조건에 만족하지 못한 오브젝트들의 Renderer를 비활성화 시키지 않음
Maximum Timed Observers 낮을 수록 서버가 Observer 업데이트 하는 시간이 더 빨라짐 (빨리 확인 할 수 있지만 서버 과부하가 생길 수 있음)
Default Conditions 게임 전체 기본 Condition

 

NetworkObserver는 오브젝트 별로 Condition을 지정할 수 있습니다.

Override Type Add Missing : ObserverManager의 Condition 중 NetworkObserver가 가지고 있지 않은 Condition을 추가
Use Manager : ObserverManager의 Condition을 사용
Ignore Manager : ObserverManager의 Condition을 무시하고 NetworkObserver의 Condition 사용
Update Host Visibility False면 호스트에서 해당 오브젝트의 Renderer를 비활성화 시키지 않음
Observer Conditions 해당 오브젝트의 Condition들

 


 Condition 종류

이제 Observer Condition의 종류를 알아보겠습니다.

기본적으로 제공하는 Condition은 ScriptableObject 6개인데 얘네들을 직접 수정하는 것보단 새로운 Condition을 추가하는 게 더 좋습니다.

위 사진처럼 Project에서 우클릭으로 Condition들을 생성할 수 있습니다.

 

공통 속성

Add Order Condition이 여러 개 일 경우 적용되는 순서
Is Constant True면 런타임에서 Condition의 설정이나 데이터를 못 바꾸게 끔 변경

 

 

Host Only Condition

특정 네트워크 오브젝트를 호스트만 볼 수 있게끔 하는 Condition

 

 

Match Condition

특정 Match 끼리만 볼 수 있는 Condition?

이 Match는 Class MatchCondition 이 사이트에 나와 있는 함수들로 추가하거나 삭제할 수 있는 거 같습니다.

public static void AddToMatch(int match, NetworkConnection conn, NetworkManager manager = null, bool replaceMatch = false)

뭐 이런 함수로 match를 추가할 수 있다고 하네요.

 

 

Grid Condition

그리드 안에 있을 때만 볼 수 있는 Condition

그리드 범위는 Network Manager 컴포넌트가 있는 오브젝트에 Hash Grid를 추가하면 됩니다.

 

 

Owner Only Condition

Client가 Owner를 가진 물체만 볼 수 있도록 하는 Condition

 

 

Distance Condition

특정 거리 안에 들어와야 볼 수 있도록 하는 Condition

 

 

Maximum Distance 다른 네트워크 오브젝트를 볼 수 있는 최대 거리
Hide Distance Percent 네트워크 오브젝트가 사라지는 거리

 

Hide Distance Percent 같은 경우엔 예를 들어 maximum distance가 2고 hide가 1로 설정하면

다른 플레이어가 보이기 위해선 내 플레이어와 거리가 2 이내가 되어야 하지만 보였다가 사라지려면 maximum distance + maximum distance * hide distance percent가 되어야 합니다.

즉, 예시에선 보이려면 거리가 2 이내, 안 보일려면 4 이상 돼야 합니다.

왼쪽 : max 2, hide 1 오른쪽 : max 2, hide 0

 

 

Scene Condition

같은 Scene 안에 있어야 볼 수 있는 Condition

 


Condition을 커스텀으로 만들 수 있다고도 합니다.

 

Custom Conditions | Fish-Net: Networking Evolved

GuidesFeaturesArea of Interest (Observer System)Custom Conditions Sometimes you may have unique requirements for an observer condition. When this is the case you can easily create your own ObserverCondition. The code below comments on how to create your ow

fish-networking.gitbook.io

아직 필요성을 못 느껴서 해보진 않았지만 쓰게 될 경우 사용법을 올리도록 하겠습니다.

'유니티 > Tutorial' 카테고리의 다른 글

Unity Fishnet[4] RPC  (3) 2025.07.31
Unity Fishnet[2] Ownership과 Player Move  (2) 2025.07.08
Unity Fishnet[1] 네트워크 연결 및 플레이어 스폰  (2) 2025.06.30
Unity Fishnet[0] 소개 및 설치  (0) 2025.06.24
Unity 디자인 패턴 Command  (2) 2025.05.28
'유니티/Tutorial' 카테고리의 다른 글
  • Unity Fishnet[4] RPC
  • Unity Fishnet[2] Ownership과 Player Move
  • Unity Fishnet[1] 네트워크 연결 및 플레이어 스폰
  • Unity Fishnet[0] 소개 및 설치
어나더원
어나더원
경력 -1년 차 백수입니다. 개인 프로젝트 진행 중
  • 어나더원
    개발과 연구
    어나더원
    경력 -1년 차 백수입니다. 개인 프로젝트 진행 중
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • 유니티 (20)
        • Script (4)
        • Shader (1)
        • Tutorial (12)
        • Tip (3)
      • 컴퓨터 (1)
        • Window Error (1)
  • 공지사항

  • 인기 글

  • 태그

    Ai
    Blink
    blink effect
    compute shader
    fishnet
    FSM
    MCP
    Multiplayer
    Network
    Observer
  • 링크

  • hELLO· Designed By정상우.v4.10.3
  • 글쓰기  |  관리자
어나더원
Unity Fishnet[3] Observer
상단으로

티스토리툴바