Article by: Serhii Snitsaruk(読了時間:2分)
先日、Sentry の Godot Engine SDK のバージョン 2.0.0 をリリースし、C#/.NET サポートとアプリケーションメトリクスを一般提供(GA)しました。これにより、マネージド C# コードからエラーを捉え、開発ビルドと製品版ビルドの両方でカスタムメトリクスを追跡できるようになりました。
C#/.NET サポート
Godot は非常に性格の異なる2つのスクリプティングの世界、GDScript と C# をサポートしています。1.x のリリースでは、GDScript、エンジン本体、ネイティブの C/C++ コードから Issue を捉えられるよう SDK をインストルメントし、公式にサポートされるすべてのプラットフォームへとサポートを広げてきました。2.0.0 のリリースでは、Godot Engine 上での .NET 向けの第一級のエラーレポートを導入します。
マネージドコードからのエラーは、GDScript やエンジンの Issue と同じトレース上に並んで表示されるようになり、タグ・breadcrumbs・ユーザーコンテキストといった scope の要素も、現時点で同期されている範囲で付与されます。
では、これが実際にどう動くのかを見てみましょう。以下は私たちの Godot ゲームで実行時に例外を投げる C# コードの短縮版です。
private List<UpgradePathBase>? TryFetchUpgradesFromServer()
{
var fetchTransaction = SentrySdk.StartTransaction(“fetch_upgrades”, “http.client”);
return ParseUpgradeData(FetchUpgradeDataFromServer(fetchTransaction), fetchTransaction);
}
private List<UpgradePathBase>? ParseUpgradeData(string responseContent, ITransactionTracer transaction)
{
// …
// Parsing the server response throws JsonException
var serverResponse = JsonSerializer.Deserialize<ServerUpgradeResponse>(responseContent);
var upgradePaths = new List<UpgradePathBase>(serverResponse!.upgrades.Length);
// …
}
SDK は実行時にそのエラーをキャプチャし、envelope を Sentry プロジェクトに送信します。Sentry ではこの Issue は次のように表示されます。
Metrics

もう1つの例として、ローグライト/サバイバー系ゲームで、1回のラン(プレイ)にどれくらい時間がかかるのか、またプレイヤーが平均してどの経験レベルまで到達するのかを見てみましょう。game.run.time は1回のランを完了するまでの所要時間を記録し、game.run.xp_level はそのランで到達した経験レベルを記録します。
この例が示しているのは、メトリクスはパフォーマンスの計測だけでなく、ゲームプレイそのものの分析にも活用できるということです。こうしたデータを活用すれば、ゲームプレイを左右するさまざまな要素のバランス調整や、より良いプレイヤー体験の実現に役立てられます。

試してみる
ぜひお試しください。SDKの改善を進めるにあたり、みなさんからのフィードバックをお待ちしています。始めるには、Godot Asset Store または GitHub から Sentry をダウンロードしてください。アーカイブをプロジェクトに展開し、プロジェクト設定から [Sentry] → [Options] で DSN を設定すれば、完全なコンテキスト付きでエラーを受け取れるようになります。詳しくは、C#/.NET向けのガイドをご覧ください。それでは、よいデバッグを!
Original Page: .NET support for Godot is now generally available
IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談は「お問い合わせ」からお気軽にお問い合わせください。

