へきらくおきらく

Unreal EngineやSingle Board Computerでのゲーム開発メモ

Unreal EngineにBacktraceを導入してクラッシュレポートを管理!簡単にクラッシュできるおまけつき!

Calendar for Unreal Engine (UE) | Advent Calendar 2021 - Qiita

パート3の14日目です!

昨日はminami_kohさんの「[UE4] 具体的な実装例から知るマルチプレイヤーゲーム実装の基本のキ - Qiita」でした。

 

本日はどうぞよろしくおねがいいたします。

 

記事の目的・概要

Backtrace GameJam に参加しました。次回のBacktrace GameJam開催時には参加してくれる人が増えたらいいなと思いましたので、読んだ人がスムーズにBacktrace設定でき、一瞬でゲームクラッシュさせ、クラッシュレポートを上げられるようにします。

記事の主な対象の方としては、ゲームジャムに興味のある方、できればUnreal Engine 用に Visual Studio をセットアップするなどを行いパッケージングやC++コードのビルドができる状態であると理解しやすいと思います。

Unreal Engineのバージョンは4.27.2を使用します。

流れはこんな感じです。

  • BacktraceをUnreal Engineに導入
  • プロジェクト設定のフローを説明
  • クラッシュさせて、web管理画面を眺めてみます

Backtraceとは

クラッシュ・例外などを収集して管理できるツールです。

マルチプラットフォーム対応。

Backtrace GameJamとは

「期間内にBacktraceを導入してクラッシュレポートを上げること」という条件付きの変わったゲームジャムです。

ゲームジャムが何かという方はおググりください→ゲームジャム - Wikipedia

第3回が12/3~5の制作期間で行われ、「IT'S NOT A BUG」というBacktraceらしいテーマで開催されました。

作ったゲーム

少女からは見えない幽霊(テーマ回収)を操作して、明かりを消したり物を動かして驚かせ、少女がだんだんハイな気分になっていくものを作りました。

waka2ya.itch.io


itch.ioなどのゲームジャムに一緒に参加してくれる方・・・なにとぞ・・・

 

覚えておくとよい用語

トークンが2つあるということを覚えてください。読み飛ばしていただいてヨシ!

  • Subdomein(universe、REALMと書かれていることも。統一してほしい!)
    • アカウントのURL。アカウント作成時に決めます。
      • https://<Subdomein>.sp.backtrace.io という管理画面となります。
  • Project
    • プロジェクトは管理上の単位です。ゲームタイトルと同じと思ってよいかな。以下2つのトークンを複数発行して紐付かせるためのものです。
  • submission token(送信トークン)
    • https://unreal.backtrace.io/post//<submission token>
      • という感じのURLを使ってゲームクラッシュ時に送信します。
    • プロジェクトに対して複数発行でき、トークン毎に有効、無効を切り替えられます。ゲームのアップデートなどで切り替え管理するのが便利そうです。
  • symbol token(シンボルトークン)
    • Backtraceサーバにシンボルをアップロードするための文字列で、パッケージの後半でbacktrace_post_build.exeというプログラムに対して渡すものです。
    • .uprojectに書き込まれます。(Windows向けはエディタ上で設定できます。)

Backtrace側設定

アカウント・プロジェクト作成

f:id:wakanya:20211212033849p:plain

 

  • Subdomeinが管理画面やエラー送信時のURLに使用されます。
    • はずかしい文字列はやめようね
  • Usernameは、最初のAdmin(管理者)ユーザになります。

f:id:wakanya:20211212034020p:plain

 

  • 管理者ユーザのパスワード設定です。

f:id:wakanya:20211212035028p:plain  f:id:wakanya:20211212035102p:plain

 

f:id:wakanya:20211212035141p:plain

 

  • ようこそされるので、Project名を入力します

f:id:wakanya:20211212035434p:plain  f:id:wakanya:20211212035504p:plain

 

  • この画面になります。Unrealのボタンを押したいところですが、とりあえずこの記事を読み進めてください。

f:id:wakanya:20211212035704p:plain

 

  • ちなみに、左上やURLでプロジェクト名がわかります。

f:id:wakanya:20211213223321p:plain

 

  • 新しく別のプロジェクトを作りたい場合は、右上のアカウントを押して、
    • 「プロジェクトを作成」を選択します。

f:id:wakanya:20211212040411p:plain

 

送信トークンを準備

submission tokenを用意します。

  • 設定画面に居ない場合はアカウントの部分を押して「プロジェクト設定」に移動

f:id:wakanya:20211212040813p:plain

 

  • 左側から「エラー送信」を押し、送信トークンを確認します。
  • メモ帳かどこかにコピーしておきましょう。

f:id:wakanya:20211212040928p:plain

 

  • トークンがない場合は、右側の(+)を押して、作成します。

f:id:wakanya:20211212041121p:plain

 

シンボルトークンを準備

symbol tokenを用意します。

  • 設定画面の左側より、「シンボル」 > 「アクセストークン」を選択。
  • トークンがなければ、右側の(+)ボタンを押して作成します。

f:id:wakanya:20211212161941p:plain

 

  • コピーしてメモ帳に控えておきましょう。

f:id:wakanya:20211212162133p:plain

 

Backtrace側の設定は以上になります。

Unreal Engineプロジェクト側設定

プラグイン入手とプロジェクト作成

Backtrace Crash Reporting Plugin in Code Plugins - UE Marketplace

 

  • EpicGamesLauncherより、プラグインをダウンロードしてきます。エンジンにインストールしますが、後にプロジェクト側に持ってきます。

f:id:wakanya:20211212173044p:plain

 

  • プラグインをインストールしたエンジンで、新規プロジェクトを作成します。
  • C++プロジェクトで作成してください。(写真はUE4.27)

f:id:wakanya:20211212173300p:plain

 

クラッシュレポーターを含めるようにする

  • Edit(編集) > Project Settingsを開きます。

f:id:wakanya:20211212175420p:plain

 

  • Packaging項目のInclude Crash Reporterにチェックを入れます。これでクラッシュレポーターが含まれます。

f:id:wakanya:20211212175056p:plain

 

エディタ上でBacktraceプラグインを有効化し、設定を適用

  • エディタが起動したら、Backtraceプラグインを有効にするため、Edit > Pluginsを開きます。

f:id:wakanya:20211212173403p:plain

 

  • 検索窓に「Backtrace」などと打ち、Backtraceプラグインを見つけて有効(Enabled)します。エディタの再起動を促されるので、再起動します。

f:id:wakanya:20211212173502p:plain

 

  • エディタを再起動すると、Edit > Backtraceを選択できるので選択します。

f:id:wakanya:20211212173644p:plain

 

  • ↓のようなウィンドウが立ち上がります。すでにアカウントを作成しているので、「I have an account」を選択します。

f:id:wakanya:20211212173703p:plain

 

  • 「Instance sub-domain」には作成したSubdomein、「Project name」も最初に作成したものを入れます。(Project nameの情報必要・・・?)

f:id:wakanya:20211212173759p:plain

 

  • 次に、送信トークン(submission token)を聞かれるので、メモっておいた送信トークンを入力します。

f:id:wakanya:20211212173942p:plain

 

  • 続いて、シンボルトークン(symbol token)です。送信トークンとシンボルトークンは別ですので、お間違いのないように。

f:id:wakanya:20211212174621p:plain

 

  • 最後に、これでええのんか?と聞かれるのでチェックはつけずに進みます。
    • もう一度Backtrace設定を開くとこの画面になるので、ここで編集できます。

f:id:wakanya:20211212175819p:plain

 

  • エディタでの設定は以上です。これでパッケージングをすればOK・・・

とはなりません。????

f:id:wakanya:20211212180139p:plain

ズコー

  • パッケージングに失敗しますので通るように作業していきます。

パッケージングのfix

エディタ上で設定すると、プロジェクト側のPlugins以下に

Plugins\BacktraceIntegration\Source\BacktraceBlueprintLibrary\Private\BacktraceUserSettings.hというソースが生成されるのですが、

エンジン側にインストールされたプラグインにも同様のソースがあり、役割が重複しています。

なので、プロジェクト側にもってきて解決します。

Windows以外のプラットフォームはわかりませんが、エンジン側にプラグインインストールする設定になっているの、間違いなんじゃないかな・・・)

エンジン側のプラグイン場所特定

  • ランチャー版エンジンの場合は、ショートカットを作ってプロパティを見てみます。

f:id:wakanya:20211212181951p:plain

 

f:id:wakanya:20211212182554p:plain

 

  • UE_4.27\Engine\Plugins\Marketplaceに、「BacktraceIntegration」があるので、これを「切り取り」します。

f:id:wakanya:20211212182616p:plain

  • 自分のプロジェクト側のPluginsにも「BacktraceIntegration」があるので、ここにペーストします。ただし、ファイルの置き換えはしないでください。プロジェクトにある方のファイルが新しいので。

f:id:wakanya:20211212182917p:plain

 

  • エンジン側に残るものが気になるなら、EpicGamesLauncherからプラグインをアンインストールしておきます。「Installed Plugins」を開きます。

f:id:wakanya:20211212183347p:plain

 

  • Backtraceを「Remove」しておきます。

f:id:wakanya:20211212183435p:plain

 

  • Plugins\Marketplace\BacktraceIntegration\Source\以下に手を入れます。
  • BacktraceBlueprintLibrary\BacktraceBlueprintLibrary.Build.cs
  •             // PublicIncludePathModuleNames.Add("BacktraceBlueprintLibrary");
            }
        }
    }
     
  • BacktraceIntegration\BacktraceIntegration.Build.cs
  •             // PublicIncludePathModuleNames.Add("BacktraceIntegration");
            }
        }
    }
     
  • BacktraceSettingsLibrary\BacktraceSettingsLibrary.Build.cs
  •             // PublicIncludePathModuleNames.Add("BacktraceSettingsLibrary");
            }
        }
    }

 

プロジェクトをビルド

ここからはいつもどおりです。

f:id:wakanya:20211212183856p:plain

 

f:id:wakanya:20211212184923p:plain

 

ビルドが通っていれば、Windowsパッケージングでエラーを上げる準備が整いました!

 

クラッシュさせる

※クラッシュについては特に自己責任で実行をおねがいします。

C++ならぬるぽで一撃ですが、Blueprintを書いてゲームをクラッシュさせるのは意外と難しいです。(簡単に落とせる方法ご存じの方おりましたら教えて下さい。。)

  • 手段①:Create Render Target 2Dノードを使いまくる
    • 画面が固まってじわじわPCも固まってゲームクラッシュ後復帰します。

f:id:wakanya:20211212185252p:plain

 

マシンによってはクラッシュまで時間がかかりますので、

快適に自爆できるプラグインを用意しました。

github.com

 

  • Download Zipして、

f:id:wakanya:20211212191125p:plain

 

  • 解凍し、「UnrealCrash-main」をプロジェクトのPluginsフォルダに配置してください。(-mainは消してもいいです)

f:id:wakanya:20211212191318p:plain

 

  • 再度Generateし、ビルドしましょう。

f:id:wakanya:20211212183856p:plain

f:id:wakanya:20211212184923p:plain

 

  • エディタを開き、自爆用関数を呼び出すようにします。
    • 「UnrealCrashNullPtr」を用意してあるのでご利用ください。

f:id:wakanya:20211212191517p:plain

 

  • パッケージングを実行します。File > Package Project > Windowsを選択し、出力フォルダを選択してパッケージングを始めます。

f:id:wakanya:20211212192858p:plain

 

  • パッケージングの後半で、シンボルをアップロードするシーケンスが挟まります。
    • 設定したシンボルトークンが表示されています。
    • (シンボルトークンを設定していなくても上げようとします。.uprojectにPostBuildStepsが書き込まれています。)

f:id:wakanya:20211212193546p:plain

 

クラッシュレポートを送信し、管理画面で確認してみる

ゲームのクラッシュ

  • パッケージングされたゲームを起動し、自爆関数のタイミングまで進めてください。
  • クラッシュ時にクラッシュレポーターが立ち上がるので、送信します。

f:id:wakanya:20211212194950p:plain

 

トリアージ画面を確認

  • 設定画面にいる場合は、左上のロゴマークをクリックして、トリアージ画面にします。
  • クラッシュレポートが上がっていれば、エラー項目が増えているはずです。

f:id:wakanya:20211212195203p:plain

 

ここまでで、Backtrace GameJamにおける「Backtraceを導入してクラッシュレポートを上げること」はクリアとなります。

次回のBacktrace GameJamへの参加敷居をだいぶ下げられたと思います。

開催されればですが。。

 

おまけ

以降は記事の目的(設定とクラッシュレポート上げまで)より先に進んだ内容です。

Backtrace管理画面でどんな感じに見える?

  • 試しに起動後5秒でクラッシュするWindowsパッケージを3回実行してみました。
  • エラーの列に、3と表示されています。同じエラーと判断され、グルーピングしてくれてるみたいですね。
  • 次に、デバッグ(またはFingerprintの虫マーク)をクリックしてみます。

f:id:wakanya:20211213021508p:plain

 

  • コールスタックなどの詳細を見ることができます。Crashさせる関数を呼んでいるのが丸わかりです。

f:id:wakanya:20211213022118p:plain

 

youtu.be

 

  • 次に概要タブを開くと、このプロジェクトの全体でプラットフォームやエラーの種類についての割合を見ることができます。

   Androidにも導入してみました(公式ドキュメントに従うので今回は割愛)。

f:id:wakanya:20211213023206g:plain

 

Itch.ioのゲームジャムについて

見つけ方

一覧から探します:Game jams - itch.io

無数に開催されています。私はよく一覧の「Featured Jams」より人気だったりするイベントのコンセプトを眺めて、こんなゲーム作りたいなぁと妄想するのが好きです。

 

また、Forumのイベント告知カテゴリで、定期的なEpic公式の「Epic MegaJam」についての情報が上がります。

Latest Events topics - Unreal Engine Forums

「Epic MegaJam」もitch.io上で行われ、多くのゲームが投稿されます。

2021 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