Unity Cloud DiagnosticsのUser Reportingがとても便利だった。
こんにちははじめまして。Unityでゲームを作ってる何でも屋のdobuです。
次回作の制作に全力なので、最近はほとんどnoteを書いていませんでしたが、Unity Cloud DiagnosticsのUser Reportingを導入してみたらとても便利だったので、覚書も兼ねて久々に記事を書きました。
Unity Cloud Diagnosticsとは
Unityに標準で付属しているバグレポートの送信&分析機能です。ビルドしたゲームで不具合が起こると、自動・手動で情報をクラウド上にアップして、分析することが出来ます。
無料のUnity Personalでも使えますが、いろいろと制限があります(後述)
Unity Cloud Diagnosticsには、Crashes and Exceptionsと
User Reportingの2つの機能があります。
Crashes and Exceptionsとは
自動でエラー情報を収集する機能です。Unityで作ったプログラムがエラー(例外)を起こしたり、クラッシュした場合に自動でエラーの情報を収集してくれて、ブラウザ上で分析できます。
Service画面でONにするだけで導入できるので、こちらは使っている方も多いと思います。
導入方法はこちらのブログが分かりやすかったです。
User Reportingとは
ユーザーが手動でバグ報告を行うための機能です。(プログラム次第では、自動で行うようにすることも可能)
こちらは日本語の資料が全然見つかりませんでした。なんでだろう…
SDKを導入しなければいけないので、一見敷居が高そうですが、使ってみたら実に簡単でした。
User Reportingで出来ること
このようなバグ報告フォームが始めから用意されていて、unitypackageを導入するだけで簡単にゲームに組み込めます。
Bugの欄は報告のカテゴリーで、元から3種類(Bug、Performance Issue、Suggestion)用意されていますが、自由に変えることが出来ます。
こちらは、ブラウザで見ることができるUser Reportsのダッシュボード画面です。ユーザーが送信したバグ報告がスクリーンショット付きで見られます。バージョンごとや、バグ報告のカテゴリーごとにフィルターをかけることも可能。
上のバーは容量制限に対する使用量。
続いて、各項目をクリックした後に表示されるレポートの分析画面です
SUMMARY
ユーザーが入力したバグ報告の概要(入力フォームの一番上の欄)
Metrics
FPSやメモリ使用量などの変動をグラフで見ることができます。
Screenshot
スクリーンショットを撮影する機能が元から入っています。デフォルトだと大きいサイズとサムネイル用の2種類撮影されます。設定次第ではサイズを小さくして容量を削減したり、複数のスクリーンショットを撮ることも出来るようです。
Firelds
バグ報告に含めることができる文字列です。デフォルトではCategoryとDescriptionの2種類がありますが、自分で自由に追加できます。
Attacthments
バグ報告に添付ファイルを含めることが出来ます。Fieldsに入れると見にくくなってしまうような大量の文字列をテキストファイルにして添付できます。プログラム次第では動画など何でも入れられるようです。
Metadata
デバイス情報やシーンの情報などです。いろいろと載っていますが、CPUの種類とメモリ量がないのはなぜ‥?
Events
直近のDebugLogが記録されています。
User Reportingの導入方法
以下の記事を参考にUnityサービスを有効にします
Services ウィンドウから、Cloud Diagnosticsをクリックして設定画面を開きます。
User Reportingの機能とは関係ないかもしれませんが、Crashes and Exceptionsを有効にしておきます。
User Reportingの欄に、download the SDKというリンクがあるので、クリックしてSDKのzipファイルをダウンロードします。
zipを解凍するとPackageというフォルダーにUnity Editorのバージョンごとのフォルダがあるので、自分が使っているEditorバージョンのunitypackageをUnityにインポートします。
unitypackageをインポートすると、アセットフォルダにUserReportingというフォルダが追加されます。
Prefabsフォルダの中の、UserReportingPrefabをhierarchyにドラッグすると、画面の右上に「Create Report」というボタンが追加せます。
たったこれだけで導入は完了です!
あとはボタンをクリックすれば、バグ報告入力フォームが開き、「Submit」ボタンを押せばバグ報告が送信されます。
送信してから、ダッシュボードに反映されるまで5分ほどかかるようです。(なかなか反映されなくて、最初は動いてないのかと焦りました)
User Reportingのカスタマイズ
デフォルトのままでも十分有効ですが、さらに使いやすくカスタマイズできます。
スクリプト以外のカスタマイズ
テキストを日本語にする、CategoryDropdownのバグ報告のカテゴリーを自分のプロジェクトにあったものにするなど
UserReportingScriptを編集する
User Reportingでカスタマイズが必要な部分は、UserReportingScriptというスクリプトのCreateUserReport()に集約されているので、このスクリプトを書き換えれば自分のプロジェクトに必要な要素を含めることができます。
スクリーンショットのサイズを小さくする
// Take Main Screenshot
UnityUserReporting.CurrentClient.TakeScreenshot(2048, 2048, s => { });
// Take Thumbnail Screenshot
UnityUserReporting.CurrentClient.TakeScreenshot(512, 512, s => { });
デフォルトでは最大2048*2048のスクリーンショットと、サムネイル用のスクリーンショットを撮影するようになっています。
Unity Personalだと、User Reportingは1日に10MBしか使えないので、スクリーンショット付きのバグレポートを3件ほど送ると容量オーバーになってしまい、レポートを送ることが出来なくなります。
Unity PersonalでUserReportingScriptをカスタマイズする場合は、デバッグ中だけでもスクリーンショットのサイズを小さくしておかないと、すぐに容量をオーバーしてしまいテストも出来なくなってしまいます(なりました)
コメントアウトしても大丈夫ですが、スクリーンショットを1枚も撮らないとバグ報告フォームにスクリーンショットを表示する部分がnull参照になるので、単にサイズを小さくするだけの方が手軽です。
添付ファイルを変更、追加する
// Attachments
br.Attachments.Add(new UserReportAttachment("Sample Attachment.txt", "SampleAttachment.txt", "text/plain", System.Text.Encoding.UTF8.GetBytes("This is a sample attachment.")));
添付ファイルを追加しているコードがこの行。
System.Text.Encoding.UTF8.GetBytes("This is a sample attachment.")の部分が送信しているファイルの中身です。string型の文字列をバイトにして送信しているようです。
string stringData = "";
br.Attachments.Add(new UserReportAttachment("Sample Attachment.txt", "SampleAttachment.txt", "text/plain", System.Text.Encoding.UTF8.GetBytes(stringData)));
このようにすれば好きなstring型の文字列をテキストファイルにして添付できます。バイト型に出来るなら動画でも何でも添付できるのだと思いますが試してはいません。
Fieldsを追加する
レポート画面に表示されるFieldsも自分で追加することが出来ます。
追加する場所は// Attachmentsの前後で、
br.Fields.Add(new UserReportNamedValue("Filedに追加したい項目名", "データの内容"));
のようなコードを足せばFieldsを追加できます。詳細なステータスは添付ファイルに入れるとして、キャラクターのレベルやバグが発生したステージ名なんかをここに入れておけばバグレポート画面で確認しやすそうです。
デバイス情報を追加する
MetadataにCPUの種類や、メモリのサイズが記載されてなかったため追加しました。
デバイス情報は実行中に変化しないので一度だけ追加すればいいため、UserReportingScript.csのStart()の最後に
UnityUserReporting.CurrentClient.AddDeviceMetadata("ProcessorTypeAtStart", SystemInfo.processorType);
UnityUserReporting.CurrentClient.AddDeviceMetadata("SystemMemorySizeAtStart", SstemInfo.systemMemorySize.ToString());
を記述すればmetadataを追加できます。AddDeviceMetadata()は実行するたびにmetadataを追加するので、Startで一度だけ実行するのが良さそうです。
また、UserReportingScript.csのStart()で行われている初期化の後に実行する必要がありそうなので、UserReportingScript.csのStart()の最後に追加するか、他のスクリプトで追加する場合は、UserReportingScript.csよりも後に実行順を遅くする必要があります。
Fieldsと同様に、以下のCreateUserReport()に以下のように記述することでも、metadataを追加できます。こちらは実行中に変化するような情報向け。
br.DeviceMetadata.Add(new UserReportNamedValue("Metadataの名前", "内容"));
その他、カスタマイズで必要そうなことは大体全部こちらの公式ドキュメントに書いてあります(英語)
Unity Personalでの制限
このように、導入が簡単でとても便利なUser Reportingですが、一つ大きな欠点があり、Unity Personalではレポート件数が1日10件、スクリーンショットや添付ファイルなどの容量が1日10MiBまでに制限されています。
デフォルト設定でフルHDのスクリーンショットを撮ると3回で容量をオーバーしました。
容量オーバーになると、バグ報告の送信自体がエラーになるようです。
実際にリリースするゲーム向けには全然足りないですね… 自分はCi-enで支援者様向けに開発中のゲームを配布していますが、そういった限定的な配布で使うとしても、とても足りないです。
Unity PersonalでのUser Reportingは、実際にバグ報告で活用するというよりは、試しにどんなものか使ってみる程度のものだと思った方が良さそうです。
これがUser Reportingを紹介する記事がほとんどない理由なんでしょうか…?
Unity Plusは年間4万円とそこそこのお値段はしますが、User Reportingが使えれば不具合対応がかなり楽になりそうなので、導入を検討してみようと思います…!!
宣伝
※リンク先は成人向けなので注意
現在制作中のゲームが、DLsiteで販売予告中です。この記事が良いと思ったらお気に入りに追加!
制作状況はCi-enで更新してます!
この記事が気に入ったらサポートをしてみませんか?