상세 해설 - 글로벌 콜백
Bolt는 Bolt 내부에서 다양한 액션이 일어날 때 발생되는 다양한 글로벌 콜백 메소드들을 후킹하는 것을 할 수 있습니다.
이러한 콜백들을 구현하기 위해서는 새로운 C# 스크립트를 생성하고 MonoBehaviour
대신 Bolt.GlobalEventListener
에서 상속을 받습니다.
아래는 이에 대한 예제입니다.
C#
using UnityEngine;
using System.Collections;
public class NetworkCallbacks : Bolt.GlobalEventListener {
}
예를 들면 Connected
메소드를 구현하여 새로운 피어가 연결되었을 때 Bolt가 매번 우리에게 알려주는 것을 할 수 있습니다.
구현할 수 있는 모든 콜백에 대한 목록은 API 문서에서 찾아보실 수 있습니다.
C#
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가 셧다운 되었을때 파괴합니다.
C#
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")]
글로벌 이벤트 콜백 치트 시트
위에서 자세히 설명한 것처럼 GlobalEventListener
는 MonoBehaviour
에서 상속되므로 유니티 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 | 바이너리 스트림이 중지되었을 때 콜백 트리거 됨. |