ゲームのデバッグを進めるために、テスト目的の特定のゲーム データを表示する一方で、プレイヤーの情報を非表示にできます。 これを実行する方法の 1 つにロギングがありますが、デバッグ描画 API を使用すると、ゲーム データを視覚的に捉えることができます。
デバッグ描画 API を使用して基本的な形状を描画し、位置、サイズ、色や画面に表示される時間を設定できます。 たとえば、NPC の表示範囲や、元のポイントから聞こえるオーディオからの距離を可視化したい場合があります。 ボックスのデバッグ形状を使用すると、ボリュームがゲームで表示できない場合でも、ボリュームに合った寸法と位置でボックスを描画できます。 これは、ある特定のエフェクトのあるボリュームの設定を把握するのに役立ちます。
NPC の顔から表示範囲の制限まで描画された矢印のデバッグ形状を使用すると、ガードの完全な配置の設計に役立ちます。
Verse のデバッグ描画を有効にする
まず、描画する形状を確認します。
UEFN の [Outliner (アウトライナー)] で [Island Settings (島設定)] を選択します。
[Details (詳細)] パネルの検索バーに「debug」と入力します。 これにより、結果が [User Options - Debug (ユーザーオプション - デバッグ)] カテゴリにフィルタされます。
デバッグ機能と Verse デバッグ描画を有効にするには、[Debug (デバッグ)]、[Verse Debug Draw (Verse デバッグ描画)] の順にクリックします。
Verse デバッグ描画は UEFN のプレイ セッション中にのみアクティブになります。 有効化はユーザーごとに行われます。すなわち、[Debug (デバッグ)] と [Verse Debug Draw (Verse デバッグ描画)] を有効化した人だけがデバッグ形状を見ることができます。 デバッグ形状は、このオプションが [Island Settings] で選択されていても、UEFN ビューポートまたは公開中の島では表示されません。
最初のデバッグ形状を描画する
デバッグ描画 API で最初の形状を描画するには、次のステップを実行します。
以下のインポート式を Verse ファイルに追加します。
Verseusing { /UnrealEngine.com/Temporary/Diagnostics }debug_draw_channel型から継承するサブクラスを宣言して、チャンネルを作成します。 チャンネルは、関連する形状をグループ化するためのものです。 これらはオプションですが、使用することをお勧めします。 デバッグ描画 API の関数を使用すると、多数の形状を一度に表示、非表示またはクリアできます。ただし、表示と非表示はチャンネル レベルでのみ機能します。Versemy_debug_draw := class(debug_draw_channel) {}debug_draw型の新しい定数を宣言します。 これは、形状を描画するメソッドを呼び出すために使用するオブジェクトになります。 この例は、Channel パラメータ (前のステップで作成済み) の使用を示していますが、これはオプションです。VerseDebugDraw:debug_draw = debug_draw{Channel := my_debug_draw}DrawSphereメソッドを呼び出します。 この例では 2 つのパラメータを使用しています。
Center:= vector3{Z:= 150.0}:これは、球体の中心の位置を定義する vector3 型の必須パラメータです。 この例では、vector3型のコンストラクタを使用してリテラル値を作成しています。 これにより、球体の中心が0.0, 0.0, 150.0の位置に設定されます。?DrawDurationPolicy:= debug_draw_duration_policy.Persistent:このパラメータはオプションですが、このデフォルト値を使用すると球体が数秒後に消えます。そのため、これを Persistent ポリシーに設定します。 つまり、球体は、非表示になるか、他のコードでクリアされるまで、島では表示されたままになります。VerseDebugDraw.DrawSphere(Center := vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)
Verse コードを作成し、セッションを起動すると、球体が Center パラメータで設定された位置に表示されます。
形状
デバッグ描画 API を使用すると、実行中の UEFN セッションでシンプルなワイヤーフレームとして表示される形状をいくつか描画できます。 それぞれの形状はさまざまなシナリオで役に立ちます。 以下のセクションでは、各形状を描画するメソッドと各メソッドに固有のパラメータについて説明します。 その後のセクションでは、すべてのメソッドに共通するパラメータについて説明します。 このセクションの各コード例は、「最初のデバッグ形状を描画する」のコードを自分の Verse ファイルに追加していることを前提としています。
ボックス
DrawBox() メソッドを使用してキューブを描画します。
DebugDraw.DrawBox(vector3{Z:=150.0}, rotation{}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Center:vector3 | ボックスの中心を設定します |
Rotation:rotation | ボックスの回転方法を設定します |
?Extent:vector3 | ボックスの長さ、幅、奥行きを設定します。 |
カプセル
DrawCapsule() メソッドを使用してカプセルを描画します。 カプセルは、シリンダーと両端にある球体の半分で構成されています。
DebugDraw.DrawCapsule(vector3{Z:=200.0}, rotation{}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Center:vector3 | カプセルの中心を設定します |
Rotation:rotation | カプセルの回転方法を設定します |
?Height:float | カプセルの長さを設定します |
?Radius:float | 最大となるカプセルの半径を設定します |
スフィア
DrawSphere() メソッドを使用して球体を描画します。
DebugDraw.DrawSphere(vector3{Z:=150.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Center:vector3 | 球体の中心を設定します |
?Radius:float | 最大となる球体の半径を設定します |
?NumSegments:int | 球体を構成する線の数を設定します |
Cone (コーン)
DrawCone() メソッドを使用してコーンを描画します。
DebugDraw.DrawCone(vector3{Z:=150.0}, vector3{Z:=-1.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Origin:vector3 | コーンの先端の位置を設定します |
Direction:vector3 | コーンが開く方向を設定します |
?Height:float | コーンの長さを設定します |
?NumSides:int | 側面の数を設定します |
?AngleWidthRadians:float | X 方向のコーンの幅を設定します |
?AngleHeightRadians:float | Y 方向のコーンの幅を設定します |
コーンの底を完全な円にするには、AngleWidthRadians と AngleHeightRadians を同じにする必要があります。
シリンダー
DrawCylinder() メソッドを使用してシリンダーを描画します。
DebugDraw.DrawCylinder(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Start:vector3 | シリンダーの片方の端の位置を設定します |
End:vector3 | シリンダーのもう一方の端の位置を設定します |
?NumSegments:int | シリンダーの一方の端からもう一方の端を結ぶ線の数を設定します |
?Radius:float | シリンダーの端を構成する 2 つの円の半径を設定します |
ライン
DrawLine() メソッドを使用して線を描画します。
DebugDraw.DrawLine(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Start:vector3 | 線の片方の端の位置を設定します |
End:vector3 | 線のもう一方の端の位置を設定します |
Arrow (矢印)
DrawArrow() メソッドを使用して矢印を描画します。
DebugDraw.DrawArrow(vector3{Z:=100.0}, vector3{Z:=200.0}, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Start:vector3 | 矢印の起点の位置を設定します |
End:vector3 | 矢印の先の位置を設定します |
?ArrowSize:float | 矢印の先を構成する 2 つの線の長さを設定します |
ポイント
DrawPoint() メソッドを使用して点を描画します。
DebugDraw.DrawPoint(vector3{Z:=200.0}, ?Thickness:= 10.0, ?DrawDurationPolicy := debug_draw_duration_policy.Persistent)| 固有のパラメータ | 動作 |
|---|---|
Position:vector3 | 点の位置を指定します。 |
DrawPoint のデフォルトの Thickness では小さすぎて見えません。 前述の例のように Thickness を大きな値に設定すると、点が見えます。
共通パラメータ
これらのパラメータは、形状を描画するすべてのメソッドに共通です。 これらはすべてオプションで、メソッドの呼び出し時に引数として含める必要はありません。 これらを含める場合、パラメータ名の前に ? を付けます。 名前付き引数およびオプションの引数の詳細については、「関数を呼び出す」を参照してください。
色
Color パラメータを使用して、形状の色を設定します。 値は color 型である必要があります。 有効な色のリストについては、「NamedColors モジュール」を参照してください。 Colors モジュールのインポート式を Verse ファイルの冒頭に指定します。 以下は、点をさまざまな色に設定する方法の例です。
DebugDraw.DrawPoint(Position := vector3{Z:= 200.0}, ?Thickness := 20.0, ?Color := NamedColors.MediumSeaGreen)DrawDurationPolicy
DrawDurationPolicy では、デバッグ形状が画面上に残る期間を定義します。 3 つの使用可能な値があります。
SingleFrame:形状は、1 フレームの時間、画面上に残ります。 このポリシーは、形状を頻繁に再描画する場合に役立ちます。FiniteDuration:このポリシーは、特定の秒数の間、形状を表示する際にDurationパラメータとともに使用します。Persistent:永続ポリシーにより、他のコードで非表示になるかクリアされるまで形状は画面上に残ります。
持続時間
Duration パラメータは、特定の秒数の間、形状を表示する際に FiniteDuration ポリシーとともに使用します。 以下は、30 秒間表示される球体を描画するコード例です。
DebugDraw.DrawSphere(vector3{}, ?DrawDurationPolicy := debug_draw_duration_policy.FiniteDuration, ?Duration := 30.0)太さ
Thickness パラメータは、各デバッグ形状を生成する線の太さを設定します。 DrawPoint() の場合、1 つの点の大きさを設定します。
チャンネル
チャンネルを使用して関連する形状をグループ化すると、チャンネル内のすべての形状を一度に非表示、表示、クリアできます。
チャンネルを作成するには、debug_draw のインスタンスの宣言時に Channel パラメータを使用します。
DebugDraw:debug_draw = debug_draw{Channel := debug_draw_defaults}DebugDraw インスタンスを使用して描画した形状は、1 つのメソッドで非表示、表示、クリアすることができます。 たとえば、点や球体や矢印を DebugDraw インスタンスで描画する場合、しばらくの間非表示にしてから表示し、不要になったらクリアすることができます。
# Point
DebugDraw.DrawPoint(vector3{Z := 200.0}, ?Thickness:= 50.0, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
# Sphere
DebugDraw.DrawSphere(vector3{Z := 200.0}, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
# Arrow
DebugDraw.DrawArrow(vector3{Z := 200.0}, vector3{Z := 400.0}, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)
Sleep(5.0)
パラメータのデフォルト値
| パラメータ | 値 |
|---|---|
?Color:color |
|
?DrawDurationPolicy:debug_draw_duration_policy |
|
?Duration:float |
|
?Thickness:float |
|
?Radius:float |
|
例
オーディオ プレーヤーの仕掛けを視覚化する
オーディオ プレーヤーの仕掛けには、減衰を視覚化するための設定があります。 ただし、この視覚化を確認できるのは、編集モードのみです。 次の手順に従って、プレイ セッションで減衰ビジュアルを再作成する方法を学びます。
オーディオ プレーヤーの仕掛けを自分のレベルにドラッグします。 [Details] パネルで、[Enable Attenuation Visuals (減衰ビジュアルを有効化)] を選択していることを確認します。 これにより、デバッグ描画でビジュアルを正しく再作成していることを確認できます。
Verse ファイルで、
DebugDrawAudioという新しいdebug_drawインスタンスを作成します。 チャンネルにdebug_draw_audioという名前を付けます。VerseDebugDrawAudio:debug_draw = debug_draw{Channel := debug_draw_audio}float型の@editable定数を 2 つ追加します。DebugAttenuationMinDistanceとDebugAttenuationFalloffDistanceという名前にします。 これらは、オーディオ プレイヤーの仕掛けの減衰を視覚化するために描画される球体の 2 つの半径になります。Verse@editable DebugAttenuationMinDistance:float = 100.0 @editable DebugAttenuationFalloffDistance:float = 100.0オーディオ プレーヤーの仕掛けを表す
@editableをもう 1 つ追加します。AudioPlayerDeviceという名前にします。Verse@editable AudioPlayerDevice:audio_player_device = audio_player_device{}DrawAudioDeviceRange()という関数を宣言し、float型の 2 つのパラメータ (AttenuationMinDistanceとAttenuationFalloffDistance) を指定します。VerseDrawAudioDeviceRange(AttenuationMinDistance:float, AttenuationFalloffDistance:float):void =新しい関数で、オーディオ プレイヤーの仕掛けのトランスフォーム オブジェクトを取得します。
VerseAudioPlayerDeviceTransform:= AudioPlayerDevice.GetTransform()DrawSphere関数をデバッグ描画 API から使用して、減衰最小距離と減衰フォールオフ距離を表す 2 つの球体を描画します。 2 つ目のDrawSphere呼び出しのRadiusは、AttenuationMinDistanceとAttenuationFalloffDistanceの合計に設定する必要があります。これは、減衰が減衰最小距離の半径の外側でのみ開始するためです。VerseDebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent) DebugDrawAudio.DrawSphere( AudioPlayerDeviceTransform.Translation, ?Radius:= AttenuationMinDistance + AttenuationFalloffDistance, ?DrawDurationPolicy:= debug_draw_duration_policy.Persistent)Verse ファイルの
OnBegin()関数で、DrawAudioDeviceRange()関数を呼び出します。VerseOnBegin<override>()<suspends>:void= DrawAudioDeviceRange(DebugAttenuationMinDistance, DebugAttenuationFalloffDistance)Verse コードをビルドします。 Verse の仕掛けの [Details] パネルで、DebugAttenuationMinDistance と DebugAttenuationFalloffDistance の値を設定します。 これらは、オーディオ プレーヤーの仕掛けの Attenuation Min Distance と Attenuation FalloffDistance の値に 100 を掛けたものに等しくなります。
オーディオ プレイヤーの仕掛けでは、減衰最小距離と減衰フォールオフ距離にメートルを使用します。 デバッグ描画 API ではセンチメートルが使用されるため、値を変換する必要があります。
完全なスクリプト
Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Fortnite.com/Playspaces } using { /UnrealEngine.com/Temporary/Diagnostics } using { /UnrealEngine.com/Temporary/SpatialMath } debug_audio_device := class(creative_device): @editable AudioPlayerDevice:audio_player_device = audio_player_device{}