Unreal EngineにBacktraceを導入してクラッシュレポートを管理!簡単にクラッシュできるおまけつき!
Calendar for Unreal Engine (UE) | Advent Calendar 2021 - Qiita
パート3の14日目です!
昨日はminami_kohさんの「[UE4] 具体的な実装例から知るマルチプレイヤーゲーム実装の基本のキ - Qiita」でした。
本日はどうぞよろしくおねがいいたします。
- 記事の目的・概要
- 覚えておくとよい用語
- Backtrace側設定
- Unreal Engineプロジェクト側設定
- パッケージングのfix
- クラッシュさせる
- クラッシュレポートを送信し、管理画面で確認してみる
- おまけ
- おわりに
記事の目的・概要
Backtrace GameJam に参加しました。次回のBacktrace GameJam開催時には参加してくれる人が増えたらいいなと思いましたので、読んだ人がスムーズにBacktrace設定でき、一瞬でゲームクラッシュさせ、クラッシュレポートを上げられるようにします。
記事の主な対象の方としては、ゲームジャムに興味のある方、できればUnreal Engine 用に Visual Studio をセットアップするなどを行いパッケージングやC++コードのビルドができる状態であると理解しやすいと思います。
Unreal Engineのバージョンは4.27.2を使用します。
流れはこんな感じです。
- BacktraceをUnreal Engineに導入
- プロジェクト設定のフローを説明
- クラッシュさせて、web管理画面を眺めてみます
Backtraceとは
クラッシュ・例外などを収集して管理できるツールです。
マルチプラットフォーム対応。
- 公式サイト:https://backtrace.io/
- 価格(Freeプランもあり):https://backtrace.io/pricing
- プラットフォーム:https://backtrace.io/product
Backtrace GameJamとは
「期間内にBacktraceを導入してクラッシュレポートを上げること」という条件付きの変わったゲームジャムです。
ゲームジャムが何かという方はおググりください→ゲームジャム - Wikipedia
第3回が12/3~5の制作期間で行われ、「IT'S NOT A BUG」というBacktraceらしいテーマで開催されました。
作ったゲーム
少女からは見えない幽霊(テーマ回収)を操作して、明かりを消したり物を動かして驚かせ、少女がだんだんハイな気分になっていくものを作りました。
itch.ioなどのゲームジャムに一緒に参加してくれる方・・・なにとぞ・・・
覚えておくとよい用語
トークンが2つあるということを覚えてください。読み飛ばしていただいてヨシ!
- Subdomein(universe、REALMと書かれていることも。統一してほしい!)
- アカウントのURL。アカウント作成時に決めます。
- https://<Subdomein>.sp.backtrace.io という管理画面となります。
- アカウントのURL。アカウント作成時に決めます。
- Project
- プロジェクトは管理上の単位です。ゲームタイトルと同じと思ってよいかな。以下2つのトークンを複数発行して紐付かせるためのものです。
- submission token(送信トークン)
- https://unreal.backtrace.io/post/
/ <submission token>- という感じのURLを使ってゲームクラッシュ時に送信します。
- プロジェクトに対して複数発行でき、トークン毎に有効、無効を切り替えられます。ゲームのアップデートなどで切り替え管理するのが便利そうです。
- https://unreal.backtrace.io/post/
- symbol token(シンボルトークン)
- Backtraceサーバにシンボルをアップロードするための文字列で、パッケージの後半でbacktrace_post_build.exeというプログラムに対して渡すものです。
- .uprojectに書き込まれます。(Windows向けはエディタ上で設定できます。)
Backtrace側設定
アカウント・プロジェクト作成
- https://backtrace.io/にアクセス
- Create an accontを押してください
- Subdomeinが管理画面やエラー送信時のURLに使用されます。
- はずかしい文字列はやめようね
- Usernameは、最初のAdmin(管理者)ユーザになります。
- 管理者ユーザのパスワード設定です。
- サブドメインで設定した管理画面へのログイン画面となります
- ようこそされるので、Project名を入力します
- この画面になります。Unrealのボタンを押したいところですが、とりあえずこの記事を読み進めてください。
- ちなみに、左上やURLでプロジェクト名がわかります。
- 新しく別のプロジェクトを作りたい場合は、右上のアカウントを押して、
- 「プロジェクトを作成」を選択します。
送信トークンを準備
submission tokenを用意します。
- 設定画面に居ない場合はアカウントの部分を押して「プロジェクト設定」に移動
- 左側から「エラー送信」を押し、送信トークンを確認します。
- メモ帳かどこかにコピーしておきましょう。
- トークンがない場合は、右側の(+)を押して、作成します。
シンボルトークンを準備
symbol tokenを用意します。
- コピーしてメモ帳に控えておきましょう。
Backtrace側の設定は以上になります。
Unreal Engineプロジェクト側設定
プラグイン入手とプロジェクト作成
- Unreal EngineのMarketplaceよりBacktraceプラグインを入手します。
Backtrace Crash Reporting Plugin in Code Plugins - UE Marketplace
- EpicGamesLauncherより、プラグインをダウンロードしてきます。エンジンにインストールしますが、後にプロジェクト側に持ってきます。
クラッシュレポーターを含めるようにする
- Edit(編集) > Project Settingsを開きます。
- Packaging項目のInclude Crash Reporterにチェックを入れます。これでクラッシュレポーターが含まれます。
エディタ上でBacktraceプラグインを有効化し、設定を適用
- エディタが起動したら、Backtraceプラグインを有効にするため、Edit > Pluginsを開きます。
- 検索窓に「Backtrace」などと打ち、Backtraceプラグインを見つけて有効(Enabled)します。エディタの再起動を促されるので、再起動します。
- エディタを再起動すると、Edit > Backtraceを選択できるので選択します。
- ↓のようなウィンドウが立ち上がります。すでにアカウントを作成しているので、「I have an account」を選択します。
- 「Instance sub-domain」には作成したSubdomein、「Project name」も最初に作成したものを入れます。(Project nameの情報必要・・・?)
- 最後に、これでええのんか?と聞かれるのでチェックはつけずに進みます。
- もう一度Backtrace設定を開くとこの画面になるので、ここで編集できます。
- エディタでの設定は以上です。これでパッケージングをすればOK・・・
とはなりません。????
ズコー
- パッケージングに失敗しますので通るように作業していきます。
パッケージングのfix
エディタ上で設定すると、プロジェクト側のPlugins以下に
Plugins\BacktraceIntegration\Source\BacktraceBlueprintLibrary\Private\BacktraceUserSettings.hというソースが生成されるのですが、
エンジン側にインストールされたプラグインにも同様のソースがあり、役割が重複しています。
なので、プロジェクト側にもってきて解決します。
(Windows以外のプラットフォームはわかりませんが、エンジン側にプラグインインストールする設定になっているの、間違いなんじゃないかな・・・)
エンジン側のプラグイン場所特定
- ランチャー版エンジンの場合は、ショートカットを作ってプロパティを見てみます。
- 作業フォルダをエクスプローラで開いてみます。
- UE_4.27\Engine\Plugins\Marketplaceに、「BacktraceIntegration」があるので、これを「切り取り」します。
- 自分のプロジェクト側のPluginsにも「BacktraceIntegration」があるので、ここにペーストします。ただし、ファイルの置き換えはしないでください。プロジェクトにある方のファイルが新しいので。
- エンジン側に残るものが気になるなら、EpicGamesLauncherからプラグインをアンインストールしておきます。「Installed Plugins」を開きます。
- Backtraceを「Remove」しておきます。
- Plugins\Marketplace\BacktraceIntegration\Source\以下に手を入れます。
- それぞれ、末尾のPublic~をコメントアウトしてください。
- BacktraceBlueprintLibrary\BacktraceBlueprintLibrary.Build.cs
-
// PublicIncludePathModuleNames.Add("BacktraceBlueprintLibrary");}}}
- BacktraceIntegration\BacktraceIntegration.Build.cs
-
// PublicIncludePathModuleNames.Add("BacktraceIntegration");}}}
- BacktraceSettingsLibrary\BacktraceSettingsLibrary.Build.cs
-
// PublicIncludePathModuleNames.Add("BacktraceSettingsLibrary");}}}
プロジェクトをビルド
ここからはいつもどおりです。
- .uprojectでGenerate Visual Studio project filesし、
- .slnをVisual Studioなどで開いて、ビルドします。
ビルドが通っていれば、Windowsパッケージングでエラーを上げる準備が整いました!
クラッシュさせる
※クラッシュについては特に自己責任で実行をおねがいします。
C++ならぬるぽで一撃ですが、Blueprintを書いてゲームをクラッシュさせるのは意外と難しいです。(簡単に落とせる方法ご存じの方おりましたら教えて下さい。。)
- 手段①:Create Render Target 2Dノードを使いまくる
- 画面が固まってじわじわPCも固まってゲームクラッシュ後復帰します。
マシンによってはクラッシュまで時間がかかりますので、
快適に自爆できるプラグインを用意しました。
- Download Zipして、
- 解凍し、「UnrealCrash-main」をプロジェクトのPluginsフォルダに配置してください。(-mainは消してもいいです)
- 再度Generateし、ビルドしましょう。
- エディタを開き、自爆用関数を呼び出すようにします。
- 「UnrealCrashNullPtr」を用意してあるのでご利用ください。
- パッケージングを実行します。File > Package Project > Windowsを選択し、出力フォルダを選択してパッケージングを始めます。
- パッケージングの後半で、シンボルをアップロードするシーケンスが挟まります。
クラッシュレポートを送信し、管理画面で確認してみる
ゲームのクラッシュ
- パッケージングされたゲームを起動し、自爆関数のタイミングまで進めてください。
- クラッシュ時にクラッシュレポーターが立ち上がるので、送信します。
トリアージ画面を確認
ここまでで、Backtrace GameJamにおける「Backtraceを導入してクラッシュレポートを上げること」はクリアとなります。
次回のBacktrace GameJamへの参加敷居をだいぶ下げられたと思います。
開催されればですが。。
おまけ
以降は記事の目的(設定とクラッシュレポート上げまで)より先に進んだ内容です。
Backtrace管理画面でどんな感じに見える?
- 試しに起動後5秒でクラッシュするWindowsパッケージを3回実行してみました。
- エラーの列に、3と表示されています。同じエラーと判断され、グルーピングしてくれてるみたいですね。
- 次に、デバッグ(またはFingerprintの虫マーク)をクリックしてみます。
- コールスタックなどの詳細を見ることができます。Crashさせる関数を呼んでいるのが丸わかりです。
- ↑ ソース というタブがありますが、VCSと連携して該当のソース表示までできるようです。
- 次に概要タブを開くと、このプロジェクトの全体でプラットフォームやエラーの種類についての割合を見ることができます。
Androidにも導入してみました(公式ドキュメントに従うので今回は割愛)。
Itch.ioのゲームジャムについて
見つけ方
一覧から探します:Game jams - itch.io
無数に開催されています。私はよく一覧の「Featured Jams」より人気だったりするイベントのコンセプトを眺めて、こんなゲーム作りたいなぁと妄想するのが好きです。
また、Forumのイベント告知カテゴリで、定期的なEpic公式の「Epic MegaJam」についての情報が上がります。
Latest Events topics - Unreal Engine Forums
「Epic MegaJam」もitch.io上で行われ、多くのゲームが投稿されます。
itch.io上へのゲームの投稿について
多くの人にプレイしてもらう、ということであればWeb上で実行できるものが望ましいです。
しかしitch.io上で動かせるHTML5形式のUnreal Engineバージョンは、おそらくUE4.23が最大だと思います。
4.24以降のコミュニティバージョンを動かすは、どうやらitch.io側の対応が必要のようですが、望み薄かなと思っています。
Cross-Origin Isolation to unblock WASM SharedArrayBuffers? - Questions & Support - itch.io
(これを見越して、今回私は4.23で作成し始めましたが、HTML5形式でのライティング表現が間に合わず、結局Windows形式オンリーになりました(泣) )
おわりに
こんな長い記事を読んでくださりありがとうございます。
ゲームジャム中はゲームを作る方に夢中で管理画面をじっくり見る余裕がなかったので、振り返れてよかったです。
itch.ioなどのゲームジャムに一緒に参加してくれる方・・・なにとぞ・・・
明日はso2さんの「初心者による猫でもわかるシリーズのまとめ的な記事」です。ねこになりたい!ニャー!!
Calendar for Unreal Engine (UE) | Advent Calendar 2021 - Qiita