(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発した新作VRソフトです!


Unity公認のクラッシュ管理プラットフォーム Backtrace【Backtrace】【Unity】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2020.3.11f1
Backtrace 3.6.0-preview.1


はじめに

今回はBacktraceというエラーやクラッシュを管理するサービスをUnityで使ってみようという記事!

f:id:kan_kikuchi:20210807111653j:plain


先にちょっと触ってみた感想を列挙すると、以下のようにかなりオススメ出来そうな感じでした!

  • 導入や使い方が簡単
  • 得られる情報が例外やクラッシュ、Debug.LogErrorと幅広い
  • Unityエディタ上で発生したエラーや例外も取得可能
  • サイトが見やすい上に情報の反映も早い(リアルタイム?)
  • 個人開発者は無料で使える
  • 担当者や状態も設定出来るので、そのままバグ管理ツールとしても使える



Backtraceとは

まずはBacktraceの概要ですが、Unityのサイトで以下のように説明がされている通り、

ユーザのデバイスで起きたエラーやクラッシュを集計し解決の手助けとなるサービスです。

Backtraceは、ゲーム内のクラッシュやエラーの補足、優先順位付け、解決作業を自動化してくれるサービスです。

BacktraceはUnityの公認ソリューションパートナー(VSP)であり、Unityの厳しい審査基準を満たして合格した商品です。

あらゆる規模のスタジオが、モバイル、PC、コンソール、ウェブで安定した高パフォーマンスのゲームを実現するためにBacktraceを選んでいます。


実際にどのような情報が取得出来るかというと、例外クラッシュはもちろん

Debug.LogErrorで出したエラーハングアップ(モバイル限定)した事まで取得可能です。

The plugin will report on 6 'classes' or errors:

Log Errors - Programmers use Debug.LogError, a variant of Debug.Log, to log error messages to the console.
Unhandled Exceptions - Unhandled Exceptions are exceptions in a game that occur outside of an explicit try / catch statement.
Handled Exceptions - Exceptions that are explicitly caught and handled.
Crashes - An end to the game play experience. The game crashes or restarts.
Hangs (mobile only) - A game is non responsive. Some platforms will tell the user “This app has stopped responding
Out of memory crashes (mobile only) - A game crashed under memory pressure.

DeepL翻訳
プラグインは、6つの「クラス」またはエラーについて報告します。

ログエラー - プログラマーは、Debug.Logの一種であるDebug.LogErrorを使用して、エラーメッセージをコンソールに記録します。
ハンドリングされていない例外 - ハンドリングされていない例外とは、ゲーム内で明示的な try / catch ステートメント以外で発生する例外のことです。
ハンドリングされた例外 - 明示的にキャッチされ、処理された例外。
クラッシュ - ゲームのプレイが終了すること。ゲームがクラッシュしたり、再起動したりすること。
Hangs (Mobile only) - ゲームがレスポンシブでないこと。一部のプラットフォームでは、ユーザーに「このアプリは応答しなくなりました」と表示されます。
Out of memory crashes (mobile only) - メモリ不足でゲームがクラッシュします。

📦 Backtrace - io.backtrace.unity | OpenUPM


さらにモバイル(Android、iOS)やPC(Windows、Mac)、

PS4&5やNintendo Switchと家庭用ゲーム機にも対応していますし、Unity以外の開発環境でも使えます。

f:id:kan_kikuchi:20210807143951j:plain


こんなに多機能だと気になるお値段ですが、なんと個人開発者の場合は無料で使えます。

f:id:kan_kikuchi:20210807155625j:plain

Backtrace | Unity for Pro


ちなみに個人開発者でなくとも、無料トライアルという形で30日間は無料で使えます。

f:id:kan_kikuchi:20210807143733j:plain

ゲーム開発者向けのエラートラッキング & クラッシュレポートソフトウェア | ゲームとアプリのクラッシュ監視 | Unity


登録方法

ここからはBacktraceの登録方法です。

まず、以下のページで諸々記入した後、Start My Free Trialを押します。

f:id:kan_kikuchi:20210807072714j:plain


すると登録が完了し、ログイン出来るようになります。

f:id:kan_kikuchi:20210807072748j:plain


なおログイン後に、プロジェクトを作成する感じになります。

f:id:kan_kikuchi:20210807073001j:plain


ちなみにUnity公式のページにも「無料トライアルを開始する」というボタンがありますが、

ここから登録しても上記ページのリンクがメールで飛んでくるだけなので二度手間になります。

f:id:kan_kikuchi:20210807071831j:plain

ゲーム開発者向けのエラートラッキング & クラッシュレポートソフトウェア | ゲームとアプリのクラッシュ監視 | Unity


Unityのプロジェクトに導入

続いてUnityのプロジェクトにBacktraceを導入する方法です。

ちなみにドキュメントは以下のページです。

(2021/8/8段階だと右下で日本語を選ぶと項目が全て消える)



プロジェクトへの導入方法は手動でダウンロードして追加するか、



Package ManagerでGit URLを使ってインストールするか、



OpenUPMを使う方法があります。



今回はドキュメントで推奨していたのでOpenUPMを使ってみます。


まずEdit/Project Settingsからウィンドウを開き、

f:id:kan_kikuchi:20210807084330j:plain


Package Managerの項目でNameをBacktrace(何でもいい)、URLをhttps://package.openupm.com

Scope(s)をio.backtrace.unityにしてSaveを押します。

f:id:kan_kikuchi:20210807085945j:plain


その後、Window/Package Managerでウィンドウを開き、

f:id:kan_kikuchi:20210807150741j:plain


Packages:My Registriesを選ぶと、Backtraceの項目が表示されるのでInstallボタンを押します。

(2021/8/8段階だと3.6.0-preview.2だとエラーが出たので3.6.0-preview.1を使用)

f:id:kan_kikuchi:20210807100407j:plain


Backtraceのインストールが完了されると、

Assets/Backtrace/Configurationという項目が表示されるようになるので、

これを押して設定ファイルを作成します。

f:id:kan_kikuchi:20210807100437j:plain


さらにHierarchy上のオブジェクトにBacktrace Clientというコンポーネントを追加し、

先程作成した設定ファイルをアタッチします。

f:id:kan_kikuchi:20210807100513j:plain


後はBacktrace Clientに表示されているSever Addressを入力すれば完了です。

f:id:kan_kikuchi:20210807100722j:plain


なお、Sever Address<のアドレスはBacktraceのページの右上からプロジェクト設定を選び、

さらにインテグレーションガイドUnityを選んだ先の

f:id:kan_kikuchi:20210807100651j:plain


サーバーアドレスで確認する事が出来ます。

f:id:kan_kikuchi:20210807100710j:plain



実際の使用イメージ

最後に実際にどのような感じで情報が取得出来るのか確認していきます。

情報収集には以下のようなAwakeとStartでエラーログ

ボタンを押した時に例外が発生するようなコードを使い、

Unityエディタ上とMac用にビルドした物で確認しました。

//=================================================================================
//自動処理
//=================================================================================
    
private void Awake() {
  Debug.LogError($"Awake エラー");
}
    
private void Start() {
  Debug.LogError($"Start エラー");
}

//=================================================================================
//ボタン押した時
//=================================================================================

/// <summary>
/// 0除算による例外を発生させる
/// </summary>
public void DivisionZero() {
  var zero = 0;
  var a = 1 / zero;
}

/// <summary>
/// nullの例外を発生させる
/// </summary>
public void NullException() {
  GameObject nullObject = null;
  var transform = nullObject.transform;
}
f:id:kan_kikuchi:20210807110431j:plain


上記のコードを実行すると、ブラウザ上でほぼリアルタイムに情報が確認出来ます。

f:id:kan_kikuchi:20210807111653j:plain


情報はいつ、何件、どこのコード及びシーン、どんな端末(端末名、OS)で、

Debug.LogErrorならログの内容等、かなり詳細に確認する事が可能です。

f:id:kan_kikuchi:20210807111725j:plain
f:id:kan_kikuchi:20210807153720j:plain
f:id:kan_kikuchi:20210807153752j:plain


ちなみに各情報に状態やタグ、担当者を設定する事も可能なので、

そのままバグ管理ツールとしても使えます。

f:id:kan_kikuchi:20210807111709j:plain