수정중인 페이지 입니다.

네트워크 객체 풀

개요

객체 풀링은 메모리 조각화를 최소화하고 CPU 및 가비지 수집기에 가해지는 부담을 줄이는 데 사용되는 일반적인 패턴입니다.

같은 이유로 NetworkRunner.Spawn() 호출 또는 NetworkRunner.Despawn() 실행 시 해제 시에 대해 새 풀을 획득할 때 NetworkObject의 풀링을 관리하기 위해 네트워크 객체 풀을 구현하는 것이 좋습니다.

게임 세션에 사용할 객체 풀은 INetworkObjectPool을 구현해야 합니다. 또한 시작 전에 알고 있어야 하며 NetworkRunner.StartGame() 메소드로 전달되는 StartGameArgs.ObjectPool 파라미터에 할당되어야 합니다. 객체 풀이 지정되지 않은 경우 NetworkObjectPoolDefault가 사용됩니다.

메인 화면으로

INetworkObjectPool

객체 풀이 Fusion NetworkRunner와 호환되려면 INetworkObjectPool 인터페이스를 구현해야 합니다. 인터페이스를 사용하려면 다음 두 가지 메소드를 구현해야 합니다:

  • AcquireInstance(): NetworkRunner.Spawn()가 호출될 때 풀에서 객체를 가져오는 데 사용

  • ReleaseInstance(): NetworkRunner.Destroy() 호출될 때 풀에서 객체를 해제하고 반환하는 데 사용

인터페이스를 구현하여 NetworkObjectSpawn()Despawn()을 Fusion이 처리하는 방식을 제어할 수 있습니다.

네트워크 객체에 대한 단일 객체 풀만 있을 수 있습니다.

메인 화면으로

NetworkObjectPoolDefault

INetworkPool 구현을 지정하지 않은 경우, NetworkRunner는 내부 기본 구현을 사용합니다. 기본 구현은 객체를 풀링 하지 않으며 대신 Spawn()에서 처음부터 NetworkObject를 생성하고 Despawn()에서 인스턴스를 삭제합니다.

class NetworkObjectPoolDefault : INetworkObjectPool {
    public NetworkObject AcquireInstance(NetworkRunner runner, NetworkPrefabInfo info) {
      if (runner.Config.PrefabTable.TryGetPrefab(info.Prefab, out var prefab)) {
        return Object.Instantiate(prefab);
      }

      return null;
    }

    public void ReleaseInstance(NetworkRunner runner, NetworkObject instance, bool isSceneObject) {
      Object.Destroy(instance.gameObject);
    }
  }
이 경우 Instantiate()Destroy()는 이러한 매개 변수는 개체를 네트워크 시뮬레이션과 올바르게 동기화하기 위해 Fusion에 의해 처리됩니다. 이러한 방법을 이 컨텍스트 밖에서 직접 사용하면 네트워크 시뮬레이션의 일부가 아닌 로컬 GameObject가 생성됩니다.


기술문서 TOP으로 돌아가기