네트워크 객체 상태 IL Weaving
개요
네트워크 코드 작성의 간편함을 유지하기 위해 Photon Fusion은 네트워크 오브젝트 속성과 피어 간에 동기화되는 내부 버퍼와의 상호작용을 자동으로 관리합니다. 이는 컴파일 과정에서 생성된 IL 코드에 직접 추가 코드를 삽입하여 수행하는데, 이 과정을 IL Weaving이라 합니다.
IL(Intermediate Language) 위빙 과정은 컴파일된 프로그램의 IL 코드를 수정하여 추가적인 기능이나 행동을 주입하는 작업입니다. 여기서 Fusion IL 위버는 컴파일 중 네트워크 처리 코드를 추가하여 네트워크 행동(Network Behaviour)의 네트워크 속성(Networked Properties)을 강화합니다. 여기에는 값의 압축/해제(compression/decompression), 검증(validation), 그리고 특히 네트워크 버퍼의 읽기 및 쓰기가 포함됩니다.
위빙 프로세스는 네트워크 로직이 컴파일된 코드에 원활하게 통합되어, 일반적인 속성처럼 작동하면서 값이 동기화되는 네트워크 속성의 올바른 작동을 보장합니다.
Fusion IL 위빙의 또 다른 역할은 프로젝트에서 정의된 모든 RPC 메소드를 분석 및 처리하여 호출 시 데이터를 보내고 받는 과정에 연결함으로써 의도된 대로 동작하게 하는 것입니다.
설정 및 실행
Photon Fusion의 대부분의 설정을 정의하는 NetworkProjectConfig
에셋에는 Weaver Settings
섹션이 있으며, 아래 설정을 포함하고 있습니다:
Assemblies to Weave
: Fusion이 네트워크 행동(NetworkBehavior
)을 탐색하여 모든 네트워크 속성(Network Properties
)을 처리할 컴파일 어셈블리 목록입니다. 네트워크 행동을 포함하지 않는 어셈블리를 제외하여 컴파일 후 시간을 단축할 수 있습니다.UseSerializableDictionary
:[Networked]
사전 속성의 초깃값을 저장할 때Fusion.SerializableDictionary
를 사용합니다. 선택하지 않으면 위버는 Unity에서 직렬화할 수 없는System.Generic.Dictionary
를 사용하게 되며, Odin과 같은 커스텀 직렬화 도구가 이를 지원할 수 있습니다.NullChecksForNetworkedProperties
: 설정하면 위버가 각NetworkBehaviour
의[Networked]
속성에 대해 소유하는NetworkObject
가 연결되었는지를 확인하는 체크를 추가합니다.CheckRpcAttributeUsage
: 설정하면 위버는RpcAttribute
가 지원되지 않는 유형에 사용되었는지 검사합니다. 모든 타입을 검사하므로 위빙 시간이 증가할 수 있습니다.CheckNetworkedPropertiesBeingEmpty
: 설정하면[Networked]
속성의 getter와 setter가 비어있는지 확인합니다.
IL 위빙 프로세스는 다음 두 가지 주요 상황에서 발생합니다:
- 자동: Unity가 프로젝트 코드 변경을 감지하면 자동으로 위빙 프로세스를 실행합니다.
- 수동: 드물게 Fusion 위버를 수동으로 실행해야 할 수 있습니다. 이 경우
Tools/Fusion/Run Weaver
메뉴 항목을 사용해 위빙을 실행할 수 있습니다.