상세 해설 - 글로벌 콜백

Bolt는 Bolt 내부에서 다양한 액션이 일어날 때 발생되는 다양한 글로벌 콜백 메소드들을 후킹하는 것을 할 수 있습니다. 이러한 콜백들을 구현하기 위해서는 새로운 C# 스크립트를 생성하고 MonoBehaviour 대신 Bolt.GlobalEventListener 에서 상속을 받습니다. 아래는 이에 대한 예제입니다.

using UnityEngine;
using System.Collections;

public class NetworkCallbacks : Bolt.GlobalEventListener {

}

예를 들면 Connected 메소드를 구현하여 새로운 피어가 연결되었을 때 Bolt가 매번 우리에게 알려주는 것을 할 수 있습니다. 구현할 수 있는 모든 콜백에 대한 목록은 API 문서에서 찾아보실 수 있습니다.

using UnityEngine;
using System.Collections;

public class NetworkCallbacks : Bolt.GlobalEventListener {
  public override void Connected(BoltConnection connection) {
    Debug.Log(connection.ToString() + " connected to us");
  }
}

중요: Bolt는 C# 표준인 public override ... 를 사용하며 Unity 처럼 override 키워드를 지정하지 않는 방식이 아닙니다.

Bolt가 콜백 스크립트를 감지하여 메소드를 호출 할 수 있는 2가지의 방식이 있습니다. 가장 기본적인 방식은 기본인 'Unity thing' 을 수행하여 다른 스크립트에 했던 것과 같이 씬에 있는 게임 오브젝트에 붙이는 것입니다.

다른 방식은 [BoltGlobalBehaviour] 속성을 사용하는 것으로 이 속성을 아래처럼 콜백 클래스에 지정한다면 Bolt는 자동적으로 클래스를 찾아서 인스턴스를 생성하여 Bolt와 같이 생존하게 하며 Bolt가 셧다운 되었을때 파괴합니다.

using UnityEngine;
using System.Collections;

[BoltGlobalBehaviour]
public class NetworkCallbacks : Bolt.GlobalEventListener {
  public override void Connected(BoltConnection connection) {
    Debug.Log(connection.ToString() + " connected to us");
  }
}

이 속성을 사용한다는 의미는 게임 객체를 수작업으로 다룰 필요가 없다는 것입니다. 속성에 2개의 파라미터를 지정하여 몇 가지 옵션을 커스터마이징 할 수 있는데 여기에 이에 대한 몇 가지 예가 있습니다.

서버에서 호출된 콜백만을 원하면 첫 번째 파라미터로 BoltNetworkModes.Server 를 전달할 수 있습니다: [BoltGlobalBehaviour(BoltNetworkModes.Server)] 동일하게 클라이언트에 콜백만을 원하면:BoltNetworkModes.Client 을 전달합니다.

씬 이름 [BoltGlobalBehaviour("Level1")] 을 전달함으로써 특정 씬에서 활성되어 있는 콜백만을 받도록 지정할 수 있습니다. 또한 씬 이름을 연달아서 전달 할 수도 있습니다: [BoltGlobalBehaviour("Level1", "Level2")]. 또는 일반 표현식을 지정하여 씬 이름이 일치하는 몇개의 씬을 지정할 수도 있습니다: [BoltGlobalBehaviour(@"Level\d")].

그리고 마지막 옵션으로 클라이언트/서버 모드 옵션을 조합하고 씬 이름을 필터링 할 수 있습니다: [BoltGlobalBehaviour(BoltNetworkModes.Server, @"Level\d")]

글로벌 이벤트 콜백 치트 시트

위에서 자세히 설명한 것처럼 GlobalEventListenerMonoBehaviour에서 상속되므로 유니티 API에 이미 있는 모든 콜백(Start, Update 등)을 사용할 수 있습니다. Bolt가 노출한 콜백은 게임 플레이 중 진행 상황을 알리거나 게임 로직으로 처리해야 하는 이벤트를 불러오기 위한 것입니다.

여기서는 Bolt 워크플로우의 주요 진입점인 Bolt.GlobalEventListener 클래스를 통해 재정의할 수 있는 모든 콜백에 대해 설명합니다.입니다. 콜백이 호출될 수 있는 위치도 할당됩니다.

  서버 클라이언트 설명
초기화 콜랙
BoltStartBegin Bolt 시뮬레이션 시작전에 콜백 트리거 됨.
BoltStartDone Bolt 시뮬레이션 시작 후에 콜백 트리거 됨.
BoltStartFailed Bolt 가 초기화를 완전하게 할 수 없을 때 콜백 트리거 됨.
BoltShutdownBegin Bolt 시뮬레이션이 종료되었을 때 콜백 트리거 됨.
연결 콜백
Connected 로컬 인스턴스가 다른 리모트 피어에 연결될 때 콜백 트리거 됨.
ConnectFailed 원격 서버에 연결 실패했을 때 콜백 트리거 됨.
ConnectRequest 이 인스턴스가 들어오는 클라이언트 연결을 수신했을 때 콜백 트리거 됨.
ConnectAttempt 원격 엔드포인트 연결 시도시 콜백 트리거 됨.
ConnectRefused 원격 서버 연결이 거부되었을 때 콜백 트리거 됨.
Disconnected 원격 엔드포인트에서 연결 해제되었을 때 콜백 트리거 됨.
Entity Callbacks
EntityReceived 네트워크로 부터 Bolt 엔티티가 수신되었을 때 콜백 트리거 됨.
EntityAttached 새로운 엔티티가 Bolt 시뮬레이션에 붙여졌을 때 콜백 트리거 됨.
EntityDetached 새로운 엔티티가 Bolt 시뮬레이션에서 떨여졌을 때 콜백 트리거 됨.
EntityFrozen Bolt 엔티티가 프로즌 되었을 때 콜백 트리거 됨.
EntityThawed Bolt 엔티티가 풀렸을 때 콜백 트리거 됨.
ControlOfEntityGained Bolt 엔티티의 제어를 Bolt의 인스턴스가 수신했을 때 콜백 트리거 됨.
ControlOfEntityLost Bolt 엔티티의 제어권을 Bolt의 인스턴스가 상실 했을 때 콜백 트리거 됨.
Scene Callbacks
SceneLoadLocalBegin 새로운 로컬 씬이 로드되었을 때 콜백 트리거 됨.
SceneLoadLocalDone 새로운 로컬 씨이 완전하게 로드 되었을 때 콜백 트리거 됨.
SceneLoadRemoteDone 원격 연결이 현재 씬에 완전하게 로드되었을 때 콜백 트리거 됨.
Session Callbacks
SessionCreatedOrUpdated 요청한 세션 생성 또는 업데이트가 성공적일 때 콜백 트리거 됨.
SessionConnected 클라이언트가 세션에 참여했을 때 콜백 트리거 됨.
SessionConnectFailed 클라이언트가 세션에 참여할 수 없을 때 콜백 트리거 됨.
SessionListUpdated 세션 목록이 갱신되었을 때 콜백 트리거 됨.
Stream Callbacks
StreamDataReceived 바이너리 스트림 데이터를 수신했을 때 콜백 트리거 됨.
StreamDataStarted 바이너리 스트리 데이터를 수신하기 시작할 때 콜백 트리거 됨.
StreamDataProgress 바이너리 스트림 데이터에서 새로운 블록이 수신되었을 때 콜백 트리거 됨.
StreamDataAborted 바이너리 스트림이 중지되었을 때 콜백 트리거 됨.

기술문서 TOP으로 돌아가기