UEFN Analytics Device の EventName 32文字制限を突破する (Verse チュートリアル)
技術系ゲーム開発者なら、テレメトリパイプラインが崩壊する瞬間を誰もが知っています。複雑なプレイヤーステートを追跡したいのに、エンジンが送信データ量を制限する場合です。Unreal Editor for Fortnite (UEFN) で開発しているなら、analytics device の EventName 32文字制限という壁に突き当たったことがあるでしょう。
ネイティブの analytics_device は JSON ペイロードをサポートしていないため、開発者は Player_Left_During_G1_F_Active_M のような読みにくい文字列を作らざるを得ません。しかし、32文字という絶対的な制限があります。
このチュートリアルでは、Verse を使用して堅牢なテレメトリエンコーディングシステムを構築します。複雑なゲーム状態を32文字未満に圧縮し、バックエンドでデコードする方法を解説します。
テレメトリボトネックの構造
Mixpanel などの標準的なプラットフォームは JSON を扱いますが、UEFN はすべてを EventName という単一のキーにフラット化することを強制します。32バイトの制限下では、1文字1文字が貴重なリソースです。プロフェッショナルな手法は、スキーマ駆動型テレメトリエンコーダーを構築することです。
ステップ 1: Verse でエンコーダーを設計する
分析を中央の Verse スクリプトに集約します。「Player_Quit」は PQ、「Medic」は M のように短縮コードを使用します。
# フォーマット: E:Type|C:Code|Z:ID|T:Time
Payload := "E:{EventType}|C:{ClassCode}|Z:{ZoneStr}|T:{TimeStr}"
if (Payload.Length <= 32):
AnalyticsDevice.RecordEvent(Payload)
ステップ 2: 高密度データのための高度なパッキング
正確な X/Y 座標を追跡する場合、空間ハッシュやグリッドベースのエンコーディングを実装します。マップをグリッドに分割し、各セルに A01 のような4文字の ID を割り当てることで、ペイロードを節約します。
ステップ 3: バックエンドでのデコード
Epic Creator Portal から CSV をエクスポートし、Python (Pandas) を使用して文字列をパースし、分析用のデータ funnel を再構築します。
限界点:いつサンドボックスを離れるべきか
文字列圧縮に何週間も費やしているなら、それはエンジンと戦っている状態です。標準の Unreal Engine 5 に移行すれば、これらの制限はなくなります。HttpModule や WebSockets で JSON を直接送信できます。Ditch Http Polling An Unreal Engine Websockets Tutorial For Real Time Backends を参照してください。
horizOn を使えば、これらのバックエンドサービスは設定済みです。API 経由で JSON を送るだけで、即座に可視化できます。
5つのベストプラクティス
- デリミタの標準化:
|などの区切り文字を統一する。 - 連続データの追跡禁止:
Tickで送らず、状態変化時のみ送る。 - 外部スキーマドキュメントの維持: 短縮コードのリストを共有する。
- 技術テレメトリとビジネス分析の分離。
- 送信前のバリデーション: Verse 内で長さをチェックする。