デモ・ランタイムガイド
環境プロファイルで地形、Scatter、ライティングを連続的に変化させ、地表情報をゲームプレイに活用します。
小さい画面では、幅の広い表を横にスクロールするとすべての列を読めます。
デモのコンポーネントでは、地形の確認、環境プロファイルを使った連続的な変化、バイオームと Scatter のライブ制御、物理レイキャストが返すバイオームの検証ができます。参考にして変更できる例であり、完成したキャラクター制御、物理的な天候シミュレーション、足音システムではありません。
デモを試すだけならコードを書く必要はありません。後半の連携例は、地表情報を自分のゲームプレイに使いたい開発者向けです。
デモを試し、各部品を確認する
Assets/DPTGames/Vertex_3D_Terrain/Vertex3DTerrain_Demo/VertexTerrain_DemoScene.unityを開きます。- 地形マテリアルと Ground Library を確認します。使用するマテリアルを Dynamic Biome Demo Controller に割り当てます。必要に応じて、Sun に Directional Light も指定します。
- まず、地形マテリアルの Inspector で最初の見た目を設定します。コントローラーの + Capture Current Settings as NEW Profile をクリックしてプロファイルを作成し、Spring などの名前を付けます。
- マテリアルの設定を実際に変更して次の見た目を作ります。もう一度キャプチャして Summer と名付けます。必要に応じて Autumn、Winter なども追加します。
- 保存した状態に戻して編集するには、そのプロファイルの Apply Profile To Material をクリックします。保存済みの設定が実際の共有マテリアルに読み込まれます。編集内容を保存する場合は、続いて Capture Profile From Material をクリックします。
- 最初のプロファイルを含め、それぞれの Transition Seconds、Easing、Channels to Animate を設定します。変更対象のバイオームスロットやライト、必要に応じて Wind を選択してください。各プロファイルの Animate To Profile を押すと、その状態まで移行して維持できます。
- 全体の動作を確認するには、二つ以上のプロファイルをキャプチャし、Run Sequence From Start をクリックします。シーケンス再生と個別プロファイルへの移行は、どちらも Edit Mode と Play モードで使用できます。Pause、Resume、Stop & Restore で操作でき、Edit Mode では全シーケンスのスクラブも可能です。
- Play モード開始時に自動再生したい場合は、Play On Start を有効にします。デモカメラで結果を確認します。
- Surface Raycast Tester を使い、ペイントされた地表から返されるバイオーム ID を確認します。
| コンポーネント・アセット | 役割 | 自分のゲームに必要か |
|---|---|---|
| Dynamic Biome Demo Controller | マテリアルと Sun の状態をキャプチャし、環境プロファイル間で Dynamic Biome、Scatter、必要に応じてライティングの設定を補間します。 | 任意です。サンプルのタイムラインを使うか、独自のゲームプレイ制御に組み込めます。 |
| Surface Raycast Tester | 物理レイキャストのヒットと、その位置で取得したバイオームを表示します。 | 任意の検証ツールです。ゲーム側から同じサーフェス問い合わせ API を直接呼び出せます。 |
| Terrain Demo Camera | 動作確認用の自由移動カメラです。 | 任意です。独自のプレイヤーやカメラに置き換えられます。 |
| Terrain Surface Data | ベイクされた三角形とバイオームの対応情報です。 | 付属の三角形ベースのバイオーム問い合わせには必要です。 |
| Terrain Surface Target | Renderer とベイク済みデータを関連付け、地表問い合わせを評価します。 | 付属のサーフェス問い合わせを利用する地形に設定します。 |
Dynamic Biome Demo Controller
コンポーネントの Inspector 上部にある Open Documentation またはコンポーネントヘッダーの Help アイコンから、オンラインの Demo & Runtime Guide を開けます。
GameObject に DPT → Dynamic Biome Demo Controller を追加します。Terrain Material を指定するか、Renderer のある GameObject にコンポーネントを追加し、その Renderer の共有マテリアルを参照できるようにします。Directional Light の回転、強さ、色も補間する場合は Sun を指定します。
状態の作成は地形マテリアルの Inspector で行います。 Dynamic Biome の各スロット、対象バイオーム ID、Dusting、Scatter Density と Colour、Surface Overrides、Flow などをマテリアル側で設定します。これらのコントロールはデモコントローラー内には重複して配置されていません。キャプチャボタンを押した時点のマテリアル値が保存されます。
同じ共有マテリアルを使う地形は、すべて同じ変更を受けます。隣接する複数の地形タイルをまとめて変化させる場合に便利です。個別に変化させたい場合は別々のマテリアルを使ってください。
単一スクリプトのコンポーネント:カスタム Inspector とキャプチャボタンは DPT_DynamicBiomeDemoController.cs 内の Editor 専用条件付きコードに含まれています。二つ目の Editor スクリプトは不要です。古い DPT_DynamicBiomeDemoControllerEditor.cs が残っている場合は、Inspector クラスの重複を防ぐため削除してください。
Inspector の各セクション
| セクション | 用途 |
|---|---|
| Open Documentation | このオンラインガイドを開きます。Unity のコンポーネント Help アイコンからもアクセスできます。 |
| Target Setup | Terrain Material と任意の Sun を指定します。 |
| Test Environment Sequence | Run Sequence From Start、Pause、Resume、Stop & Restore で、自動再生を有効にせずに変化を確認します。 |
| Environment Profiles | 独立したスナップショットをキャプチャし、移行時間、Easing、変化させるチャンネルを設定します。Animate To Profile で任意の状態へ移行して維持できます。Apply Profile To Material では全設定を即時に読み込んで編集できます。再キャプチャ、並べ替え、削除も可能です。 |
| Playback | Play On Start、Loop、任意の Loop Return Seconds、Playback Speed を設定します。 |
| Edit Mode Preview | Preview In Edit Mode を有効にし、Preview Normalized でスクラブします。終了時は Stop Preview & Restore Material を使用します。 |
プロファイルに保存される内容
各プロファイルには四つの Modifier Slot が独立したスナップショットとして保存されます。各スロットの有効状態、バイオーム ID、Weight、Smoothness、Normal、Parallax、Emission、Flow、Dusting、Scatter Response が含まれます。対応する Stylized Lighting の値、割り当てた Sun の回転、強さ、色に加え、地形マテリアルの Wind の有効状態、Strength、Direction、Height To Tip も保存されます。
プロファイルはマテリアルの現在値を参照し続けるわけではありません。Winter を作るためにマテリアルを変更しても、以前にキャプチャした Autumn のスナップショットは変わりません。既存プロファイルを更新するときは、そのプロファイルのキャプチャボタンを使います。
Apply Profile To Material は、Channels to Animate のチェック状態に関係なく、保存された全設定を共有マテリアルと任意の Sun に即時適用します。Edit Mode で再生とプレビューを停止した状態で使用し、保存済みの見た目へ戻して編集する際に便利です。Unity Undo に対応し、保存済みプロファイルは変更しません。
一方、Animate To Profile は現在の見た目から補間を開始し、移行先プロファイルでチェックされたチャンネルだけを変更して、その結果を維持します。Edit Mode、Play モード、別のプロファイルへの移行中にも使用できます。
シェーダーの設定は 地形マテリアル設定、バイオームの Scatter Response がインスタンシングされた植生に与える影響は 3D Scatter ガイド を参照してください。
環境プロファイルとタイムライン
Environment Profiles は、季節、干ばつ、洪水、気温の変化などを表現するために利用できます。Run Sequence From Start は最初のプロファイルでチェックされたチャンネルを開始時の見た目に適用し、その後のプロファイルへ順番に移行します。Animate To Profile では、最初のプロファイルも含め、キャプチャ済みの任意のプロファイルを直接指定できます。
プロファイル 1 にも他のプロファイルと同じコントロールがあります。 Transition Seconds、Easing、Slot 1–4、Stylized Lighting、Directional Light、Wind を設定できます。チェックされていないチャンネルは現在値を維持します。最初にキャプチャしたプロファイルではすべてのチャンネルが初期選択され、それ以降の新規キャプチャでは前の確定状態との差分が検出されます。既存のチェック状態は保持されます。
一連のプロファイルをキャプチャする
- Spring:マテリアルと必要に応じて Sun を設定し、+ Capture Current Settings as NEW Profile をクリックします。名前を Spring にします。これがタイムラインの開始状態です。
- Summer:マテリアルとライトを夏の状態に変更し、同じボタンで再びキャプチャします。Summer と名付け、Transition Seconds に移行時間を設定します。
- Autumn:Dusting、Scatter、ライティングなどを調整し、三つ目のプロファイルとして保存します。
- Winter:積雪用の Dusting、少ない植生、寒色寄りのライティングなどを設定します。四つ目のプロファイルをキャプチャして移行時間を設定します。
- 最初のプロファイル以外では、新規キャプチャ時に前の確定状態と異なるバイオーム、ライティング、風のチャンネルが自動選択されます。Channels to Animate は最初のプロファイルも含め手動で変更できます。チェックを外したチャンネルは現在値を維持します。
- Preview In Edit Mode と Preview Normalized でシーケンスを確認し、Stop Preview & Restore Material で終了します。Loop を有効にすると、最後の状態から最初のプロファイルでチェックしたチャンネルへ戻ります。チェックしていないチャンネルは変更されません。
保存済みプロファイルの再編集:編集するプロファイルの Apply Profile To Material をクリックし、マテリアルまたは Sun を調整します。その後 Capture Profile From Material をクリックして確認します。上書きされるのは選択したスナップショットだけです。適用とキャプチャの前にはプレビューと再生を停止してください。
操作一覧
| 設定・ボタン | 動作 |
|---|---|
| + Capture Current Settings as NEW Profile | 現在のマテリアルと Sun の独立したスナップショットを末尾に追加します。以前のプロファイルには影響しません。 |
| Capture Profile From Material / Capture Current Settings into Profile | 現在のマテリアルと Sun の値を、選択したプロファイルへコピーします。保存済みのプロファイルを上書きする場合は確認が表示されます。 |
| Apply Profile To Material | 保存済みの全バイオームスロット、Dynamic Biomes の全体設定、ライティングとキャプチャ済みの風の設定を、共有マテリアルと任意の Sun に即時適用します。Channels to Animate は無視され、保存済みスナップショットは変更されません。Stylized Lighting の値は復元しますが、シェーダー機能の有効状態は変更しません。再生、状態維持セッション、プレビューを停止した Edit Mode で使用できます。 |
| Animate To Profile | 現在の見た目から、対象プロファイルでチェックしたチャンネルを指定の時間と Easing に従って補間し、完了後もその状態を維持します。キャプチャしたプロファイルが一つだけの場合や、最初のプロファイルでも使用できます。進行中の移行を中断して切り替えることもできます。 |
| Name | Spring、Winter、Drought、Flooding などの分かりやすい名前です。 |
| Transition Seconds | そのプロファイルへ移行する時間で、プロファイル 1 も対象です。0 なら即時適用して状態を維持します。シーケンス再生ではプロファイル 1 から即時に開始し、最後からの戻りには Loop Return Seconds が使用されます。 |
| Easing | 移行の進み方を制御する AnimationCurve です。 |
| Channels to Animate | 最初のプロファイルを含む各プロファイルで、Slot 1–4、Stylized Lighting、Directional Light、Wind を個別に選択します。この設定は個別のプロファイル要求とシーケンス再生の両方に適用されます。チェックを外したチャンネルは現在値を維持します。Apply Profile To Material は代わりに全設定を読み込みます。 |
| Run Sequence From Start / Pause / Resume | Run Sequence で全シーケンスをテストします。Pause と Resume はシーケンス、または未完了の個別プロファイルへの移行を制御します。移行完了後の状態維持中に Resume を押しても再開始しません。 |
| Stop & Restore | 再生、状態維持、スクラブを停止し、セッション開始前のマテリアル、Sun、風の設定に復元します。複数のプロファイルへ切り替えても、最初のセッション開始前の状態に戻ります。コンポーネントの無効化や削除でも元の状態に戻ります。 |
| Play On Start | 二つ以上の完全なスナップショットがあるとき、Play モード開始時に自動再生する設定です。新規コントローラーでは初期状態で無効です。 |
| Loop / Loop Return Seconds | 全シーケンスの最後から最初のプロファイルでチェックしたチャンネルへ戻る際の移行を設定します。Animate To Profile には影響しません。個別に要求したプロファイルは次の要求があるまで状態を維持します。 |
| Playback Speed | シーケンスと個別プロファイルへの移行の時間経過倍率です。1 は通常速度、0 は時間の進行停止です。 |
| Preview In Edit Mode / Preview Normalized | Edit Mode で、Loop が有効な場合の戻りも含めて全シーケンスをスクラブします。個別プロファイルへの移行中や状態維持中は無効です。先に Stop & Restore を使用してください。 |
| Stop Preview & Restore Material | プレビュー開始時に保存したマテリアルとライトの値を復元します。元のマテリアルを編集したり別のプロファイルをキャプチャしたりする前に実行してください。 |
指定したプロファイルへ移行して状態を維持する
- 目標の見た目をキャプチャします。個別のプロファイル要求には一つのキャプチャ済みプロファイルだけで十分です。
- 移行先プロファイルの Transition Seconds、Easing、変更するチャンネルを設定します。最初のプロファイルにも同じコントロールがあります。
- Animate To Profile をクリックします。移行が完了すると、進行バーに Holding: プロファイル名 と表示されます。
- 別の状態が必要になったら、そのプロファイルを要求します。移行中でも、元の開始状態に戻ることなく、その時点で補間された見た目から新しい移行が始まります。
要求した状態は、別のプロファイル要求、Stop & Restore、シーケンスの再開始、コンポーネントのクリーンアップまで維持されます。個別プロファイルの要求は Loop によって自動的に次へ進みません。Pause は未完了の移行を停止し、Resume で続行します。移行済みの保持状態には再開すべき処理がありません。
即時の適用とアニメーションによる切り替え:Edit Mode の Apply Profile To Material は保存したスナップショット全体を即時に読み込み、編集するための操作です。ゲームプレイ中に選択したチャンネルだけを即時に切り替えるには、移行先の Transition Seconds を 0 にして Animate To Profile を呼び出します。
Edit Mode の要求と状態維持セッションは、共有マテリアルの値を一時的に変更します。元のマテリアル設定を編集、キャプチャ、保存する前に停止して復元してください。全シーケンスの動作確認には引き続き Run Sequence From Start を利用できます。
環境プロファイルでの風の制御
地形マテリアルの Inspector で Enable Wind、Wind Strength、Wind Direction、Height To Tip を設定してからプロファイルをキャプチャします。そのプロファイルの Wind チャンネルにチェックすると、これらの値がアニメーションします。チェックを外すと風の現在値は維持されます。
風を無効にする移行では、強さをゼロまでフェードさせてから到達時にシェーダー機能を無効化します。有効にする移行では、ゼロから保存した強さへ徐々に変化します。Direction と Height To Tip も補間されます。Stylized Lighting と異なり、Wind チャンネルは機能の有効状態も切り替えられます。
風のデータが保存されていない古いプロファイルは、Wind にチェックがあっても現在の風を変更しません。風の設定を追加する場合は停止・復元し、古いプロファイルを適用してマテリアルの風を設定し、再キャプチャしてください。Scatter グループ側にも独自の Enable Wind の選択と対応マテリアルが必要です。全体の風をキャプチャしても、グループごとの風の設定は変更されません。
コードや UnityEvent からのプロファイル切り替え
AnimateToProfile(string profileName) で名前を指定するか、AnimateToProfile(int profileIndex) でリスト中の位置を指定できます。インデックスは 0 から始まります。 例えば controller.AnimateToProfile(0) は最初のプロファイルを要求します。名前の大文字と小文字は区別されません。重複する名前では最初に一致する項目が選択されるため、固有の名前を使用してください。無効な指定や未キャプチャのプロファイルでは警告が出て、進行中の移行は変更されません。
次の例を EnvironmentProfileRequests.cs として保存し、GameObject に追加して Demo Controller の参照を指定します。Winter と Summer という名前のプロファイルを用意し、ゲームロジックまたは UI から対応するメソッドを呼び出します。
using UnityEngine;
using DPT.Vertex3DTerrain.Demo;
public class EnvironmentProfileRequests : MonoBehaviour
{
[SerializeField] private DPT_DynamicBiomeDemoController controller;
public void RequestWinter()
{
if (controller != null)
controller.AnimateToProfile("Winter");
}
public void RequestSummer()
{
if (controller != null)
controller.AnimateToProfile("Summer");
}
}ラッパースクリプトなしで UnityEvent に接続する
- UI Button の On Click() などにイベントを追加します。
- Dynamic Biome Demo Controller がある GameObject を指定します。
- 文字列または整数を受け取る AnimateToProfile メソッドを選択します。
- Winter などのプロファイル名、または 0 から始まるインデックスを入力します。イベントを呼び出すと Inspector のボタンと同じように移行し、その状態を維持します。
再生状態を取得する
| 公開プロパティ | 意味 |
|---|---|
| IsPlaying | シーケンスまたは要求した移行が進行中です。 |
| IsProfileSession | 個別プロファイルの要求セッションが存在します。一時停止中の移行や、完了後の状態維持も含みます。 |
| HasPendingProfileTransition | 要求した移行がまだ完了していません。一時停止中も true のままになる場合があります。 |
| RequestedProfileIndex | 要求したプロファイルの 0 始まりのインデックスです。 |
| ActiveProfileIndex | 移行中は -1、完了後は保持中のプロファイルのインデックスです。復元すると -1 に戻ります。 |
| CurrentTimeSeconds / CurrentPlaybackDuration | 現在の要求またはシーケンスの経過時間と長さ(秒)です。Playback Speed は実際の経過時間に影響します。 |
PlayFromStart() はシーケンス全体を実行します。PauseTimeline()、ResumeTimeline()、StopAndRestore() はどちらの再生方法にも対応します。SetTimelineNormalized(float) は個別要求セッション中に 0~1 の範囲でその移行をシークし、それ以外ではシーケンスを操作します。ApplyProfileToMaterial(int) と CaptureCurrentMaterialIntoProfile(int) は、再生とプレビューを停止した状態で使う Edit Mode の編集用メソッドです。
ライティングと移行の制限
- Stylized Lighting は任意です。 プレビューまたは再生開始時点で
_STYLIZED_LIGHTINGが有効な場合にのみ値をアニメーションします。コントローラーはシェーダーキーワードをオン・オフしません。Sun の移行は独立して動作します。 - 数値と色は補間されます。 Weight、Dusting Strength、Scatter Density と Colour、Flow Speed、Emission、シェーディング、Sun の回転などは指定時間に沿って変化します。
- ID とスイッチは離散的です。 対象バイオーム ID、Overlay Biome ID、シェーダー機能の切り替えは連続補間されません。滑らかに変化させたい場合は、可能な限り同じ対象 ID を使用し、Strength、Weight、Density を調整してください。
- 地形マテリアルで Dynamic Biomes を有効にする必要があります。全体スイッチが無効な場合、ライブ Modifier の効果は表示されません。
- プレビューは共有マテリアルを一時的に変更します。 アセット保存やマテリアル編集の前に停止・復元してください。Editor が予期せず終了した場合に備え、元のマテリアルを保存しておくと安全です。
プロファイルは地形の再ペイント、地形ジオメトリやシームの変更、水位の物理的な引き上げ、降水シミュレーションを行いません。ライブ Weight の変化は既存のペイント済みバイオームの寄与に作用します。雪の Dusting には適切なバイオーム ID と、あらかじめペイントされた Dusting マスクが必要です。
Scatter の安定したフェードと編集時の表示
Scatter の配置はペイントされたバイオームの範囲から生成されます。Dynamic Weight Multiplier と Scatter Density は、既存の安定したクランプ群から描画時に間引く方式です。泥、黄ばんだ草、干ばつなどを表現するために草の強さを下げても、毎ステップで配置を再生成しません。元の強さに戻すと同じ配置が復元されます。色の変更もライブで反映されます。
Strength は Scatter のフェード制御で、上限は 1 です。 Strength が 0 なら該当する動的 Scatter は非表示、0.5 ならおおむね半分、1 以上ならペイントされた設定量が表示されます。1 を超える値は地形シェーディングには影響する場合がありますが、Scatter の密度は増やしません。配置の最大密度を増やすには Scatter グループの Density を調整してください。Strength と Scatter Density Response は乗算され、重複するスロットの Weight Multiplier は上限適用前に合成されます。
季節によるバイオーム変更から除外したいクリスタルなどの Scatter には、そのグループの Wind の隣にある Static Scatter を有効にします。Static グループは Dynamic Biome の Weight、Scatter Density、Colour / Surface Overrides を無視します。ただし、ペイントやスカルプトに応じて配置は更新され、共有インスタンス数の上限も適用されます。
Scatter Settings の Disable While Brushing は、サーフェスまたはジオメトリのツールが選択されている間、ストロークの合間も含めて Scatter を非表示にし、配置更新を停止します。両方のツール選択を None にするか、地形ツールウィンドウを閉じると再表示されます。このオプションは Edit Mode のみ対象です。別の Update After Stroke は、非表示設定がオフのときストローク中も配置を表示し、ストローク終了後に影響を受けたソースを更新します。
Surface Raycast Tester
レイキャストは、Unity に「この線上にどのコライダーがあるか」を問い合わせます。テスターはヒットを表示し、次に地形の Surface Target にバイオームを問い合わせます。二つは別の処理です。コライダーに当たっても、サーフェスデータがあるとは限りません。
自分の地形にプローブを置く
- 小さなテスト地形を塗り、メッシュを保存します。
- ベイクするメッシュと同じ三角形配置の MeshCollider を用意します。
- 地形ツールの Bake Surface Data を使います。
- 適切な地形オブジェクトに DPT → Terrain Surface Target があり、ベイクした Surface Data が指定されていることを確認します。Renderer も必要です。
- 地形の上に別の空オブジェクトを作り、DPT → Surface Raycast Tester を追加します。
- Downward Probe、十分な Max Ray Distance、地形のコライダーを含むレイヤーマスクを指定します。
- Scene Gizmos か Game HUD を有効にし、対象、三角形番号、ID、名前を確認します。異なる地表間でプローブを動かして比較します。
| 設定 | 意味 | よくある間違い |
|---|---|---|
| Downward Probe | オブジェクトからワールド下方向に飛ばします。 | 惑星の重力方向には自動追従しません。向きを合わせた前方レイや独自のレイを使います。 |
| Transform Forward | オブジェクトのローカル前方、+Z に飛ばします。 | 地形と反対を向いている場合があります。回転させ、ギズモの線を確認します。 |
| Mouse Cursor | メインカメラからポインター方向へ飛ばします。エディターでは Scene ビューのカメラを代わりに使えます。 | 適したカメラが必要です。使えるカメラがなければ下向きのレイに戻ります。 |
| Max Ray Distance:1~500 | ヒットできる最大距離です。 | 高い位置の短いレイは届きません。除外したレイヤーは距離を伸ばしても検出できません。 |
| Raycast Layers | ヒットするコライダーのレイヤーです。 | 別のコライダーが先に当たる場合があります。検証中は地形専用のマスクが便利です。 |
| Override Surface Data | 当たった対象の Surface Target の代わりに、指定したベイクを直接読みます。 | 通常のライブ問い合わせでは空にします。指定したデータは静的で、ヒットしたメッシュと一致する必要があります。無関係な地形に同じデータを使うと誤った結果になります。 |
| Scene Gizmos | Scene ビューにプローブとヒットを表示します。 | Unity 側のギズモ表示も確認します。 |
| Game HUD | Game ビューにヒット結果を表示します。 | 検証用の表示で、プレイヤー向けの操作 UI ではありません。 |
| Log Clicks To Console | 左クリック時に現在のヒットを記録します。 | クリックしても、下向きプローブがポインターのレイに変わるわけではありません。 |
結果の読み方
Hit Object はレイを受けたコライダー、Triangle Index は参照する三角形番号です。Biome ID と Name が地表の結果、Hit Point、Normal、Distance は交点、法線、距離です。
当たっているのにバイオームが不明なら、Surface Target とデータを確認します。BoxCollider や SphereCollider は、この三角形ベースの処理で一致した地形 MeshCollider の代わりにはなりません。負の値など無効な三角形番号を、有効な問い合わせとして扱わないでください。
Terrain Demo Camera
確認用カメラに DPT → Terrain Demo Camera を追加します。自由移動とマウス視点操作ができます。歩行の物理、衝突回避、接地、惑星の重力は提供しません。
| 入力 | 動作 |
|---|---|
| W / A / S / D | カメラ基準で前、左、後ろ、右へ移動します。 |
| Space | ワールド上方向へ移動します。 |
| Ctrl または C | ワールド下方向へ移動します。 |
| 右マウスボタンを押す | マウスで見回します。 |
| Shift を押す | 移動速度に倍率を掛けて高速移動します。 |
Movement Speed は通常の速度、Fast Multiplier は Shift の倍率、Mouse Sensitivity は視点の感度です。操作表示は、覚える間に便利です。小さな形状の確認では遅く、大きな地形を移動するときは速くします。
確認用カメラには衝突制御がないため、地形を通り抜けます。橋、洞窟、階段を実際に移動できるかは、自分のゲームプレイ用コントローラーで確認します。
サーフェスデータをゲームプレイに使う
基本の流れは、地形を塗る → サーフェスデータをベイクする → 地形に関連付ける → 一致するコライダーへレイを飛ばす → ID を読む → ゲーム側の反応を選ぶです。
ベイクしたアセットは、ライブの重み変更に使う候補 ID と重みを含め、三角形ごとの代表的な地表情報を記録します。Surface Target は、その情報とマテリアルの現在の修正を読みます。一回のヒットに一つの ID を返すもので、テクスチャ全体や見えているすべての素材の一覧を返すものではありません。
小さな連携例
以下を TerrainSurfaceProbe.cs として保存し、テスト地形の上のオブジェクトに追加します。地形のレイヤーと距離を設定し、コンポーネントのメニューの Read Surface で一回問い合わせます。Console 出力は例です。ゲームに組み込むときは、自分の音、パーティクル、移動設定の参照に置き換えてください。
using UnityEngine;
using DPT.Vertex3DTerrain;
public class TerrainSurfaceProbe : MonoBehaviour
{
public LayerMask terrainLayers = ~0;
public float distance = 2f;
[ContextMenu("Read Surface")]
public void ReadSurface()
{
if (!Physics.Raycast(transform.position, Vector3.down,
out RaycastHit hit, distance, terrainLayers))
{
Debug.Log("指定距離内にコライダーがありません。");
return;
}
if (hit.triangleIndex < 0)
{
Debug.Log("このコライダーには有効な地形の三角形番号がありません。");
return;
}
if (DPT_TerrainSurfaceTarget.TryGetHitBiome(
hit, out int biomeID, out string biomeName))
{
Debug.Log($"地表: {biomeName} (ID {biomeID})");
// biomeID を使って、ゲーム側の処理を選びます。
}
else
{
Debug.Log("当たった対象に地形のサーフェスデータがありません。");
}
}
}
足音では、足音が発生するタイミングに、足やキャラクターの適した位置から問い合わせます。返った ID を、自分の音・効果の表に対応させます。ライブラリ変更後はその表も更新してください。名前は確認に便利ですが、問い合わせが返す数値はライブラリの ID です。
惑星や独自の重力では、例のワールド下方向を、自分のゲームの局所的な重力方向に置き換えます。このスクリプトで、その方向が自動推定されるわけではありません。
再ベイクするタイミング
- ゲームプレイで問い合わせる場所を塗り直した後。
- バイオームの追加、削除、並べ替えにより、データで使う ID が変わった後。
- 分割、削除、トンネル生成、簡略化などで三角形が変わった後。
- その他の形状変更により、ベイクや代表的な地表情報に影響した後。
- 簡略化した LOD コライダーなど、別のコライダーメッシュへ切り替えたとき。
通常の対応するライブ倍率は、問い合わせ時に読まれるため、毎回塗り直したり三角形データを作り直したりする必要はありません。ただし、候補はベイク済みのものです。古いベイクから、新しく塗った情報を読み出すことはできません。
問い合わせは見た目とどこまで一致するか
付属の問い合わせは代表的な地表の選択に役立ちますが、シェーダーが描く画素を完全に取得するものではありません。すべての境界や雪の領域で、カーソル下の見た目と正確に一致すると考えず、自分のゲームの要件で確認します。
| 状況 | 問い合わせの動作 | ゲームプレイへの影響 |
|---|---|---|
| 一つの三角形に複数の地表 | 一つの代表 ID を返します。静的ベイクは被覆・優先度のルール、ライブは保存した候補の重みを使います。 | 非常に小さな領域や境界では、位置ごとに別の ID が返るとは限りません。 |
| 高さで混ざる細部 | 画素単位の高さ・細部のブレンドをすべて再現しません。 | 局所的な見た目と、三角形の代表地表が異なる場合があります。 |
| ライブの重み変更 | マテリアルの倍率で、ベイクした候補を再評価します。 | ベイクにない、新しく塗った候補は選べません。 |
| ダスティング | ワールド上方向の傾斜と強さで簡略判定します。塗ったマスクは含みません。 | 見た目の被覆がない場所でも、雪などの ID が返ることがあります。移動や足音に使う前に確認します。 |
| テスターの Override Surface Data | ベイクしたアセットを直接読みます。 | Surface Target のライブ評価を通りません。通常のライブ処理を試す場合は解除します。 |
| 別のコライダーのトポロジー | 三角形番号はコライダーのもので、描画メッシュとは限りません。 | ベイクをその三角形順序に合わせる必要があります。簡略化した LOD2 に、別の元メッシュの対応をそのまま使わないでください。 |
正確な小領域、局所重力に合う雪、画素単位の被覆がゲームに必要なら、そのルール用の問い合わせを作り、検証してください。付属コンポーネントは、ここで説明した制約を持つ出発点です。
実行時・デモの問題
| 症状 | 確認すること |
|---|---|
| キャプチャボタンが表示されない | C# のコンパイルエラーがないか、単一ファイル版のコントローラーだけがインストールされているかを確認します。ボタンはカスタム Inspector の上部にあります。古い別ファイルの Editor スクリプトは削除してください。 |
| デモコントローラーが何も変えない | Terrain Material を割り当ててプロファイルをキャプチャし、個別の切り替えには Animate To Profile を使います。Run Sequence From Start には二つ以上のプロファイルが必要です。シーケンスには Play On Start または Edit Mode プレビューも使用できます。Playback Speed、マテリアルの Dynamic Biomes 全体スイッチ、移行先プロファイルのチェック済みチャンネルを確認してください。 |
| Apply Profile To Material が無効になっている | プロファイルをキャプチャした後、Stop & Restore でプレビュー、再生、状態維持セッションを終了します。Apply は Edit Mode で全スナップショットを即時に読み込んで編集するための操作です。ゲームプレイ中の切り替えには Animate To Profile を使い、選択チャンネルを即時に変更したい場合は Transition Seconds を 0 に設定します。 |
| Winter を変更したら Autumn も変わった | キャプチャ済みプロファイルの値は互いに独立しています。元のマテリアルを編集する前に、実行中のプレビューを停止してください。Autumn の保存済みデータが上書きされるのは、Autumn の Capture Profile From Material を明示的に押した場合だけです。 |
| 意図しない設定がキャプチャされた | キャプチャ前にプレビューと Play モードを停止します。編集したマテリアルが Terrain Material に指定されていること、ライトの値も保存したい場合は Sun が指定されていることを確認してください。 |
| プロファイルを切り替えてもバイオームが変わらない | 保存したプロファイルの Slot 1~4 のチェック、マテリアル内の対象バイオーム ID、スロットの有効状態、元の塗り分け、Dusting マスクと傾斜しきい値を確認します。 |
| 雪は表示されるが植生は変わらない | キャプチャ済みの Scatter Density Response とバイオーム ID を確認し、Scatter Renderer がコントローラーの対象マテリアルを使用していることを確認します。Static Scatter のグループは季節による Dynamic Biome の変化を意図的に無視します。詳しくは 3D Scatter ガイドを参照してください。 |
| Stylized Lighting が変化しない | プレビューまたは再生を始める前にマテリアル側で Stylized Lighting を有効にし、該当プロファイルの Stylized Lighting (if enabled) にチェックを入れます。コントローラーはシェーダーキーワードを切り替えません。 |
| Sun が回転しない・暗くならない | Sun に Light を指定し、該当プロファイルの Directional Light を有効にします。回転、強さ、色に十分な差がある状態をキャプチャしてください。 |
| 滑らかに変化せず瞬時に切り替わる | Transition Seconds を 0 より大きくし、Easing カーブも確認してください。バイオーム ID や一部のオン・オフ設定は段階的にしか変えられません。 |
| ループ時に最初の状態へ飛ぶ | Loop を有効にし、最後から最初への補間に Loop Return Seconds を 0 より大きく設定します。戻りの移行に影響するのは最初のプロファイルでチェックされたチャンネルです。Loop は全シーケンス用であり、個別の Animate To Profile は移行先の状態を維持します。 |
| プレビューを止めると設定が戻る | 仕様どおりです。Stop & Restore はプレビュー開始前のマテリアルとライトの値を復元します。新しい状態を保存するには、プレビュー外で実際のマテリアルを調整してからキャプチャしてください。 |
| ヒットしてもバイオームが出ない | コライダーのレイヤー、Surface Target、割り当てたベイクを確認します。一致する MeshCollider と有効な三角形番号が必要です。 |
| 名前や ID が違う | 不適切な Override を解除して最新の Surface Data を再ベイクし、ライブラリ ID とコライダーの三角形順序を確認します。 |
| 惑星でレイが外れる | Downward Probe はワールド下方向です。Transform Forward、またはゲームの重力方向に沿ったレイを使います。 |
| 複数の地形が一緒に変わる | コントローラーは共有マテリアルを編集します。地形ごとに異なる動作が必要な場合は、独立したマテリアルを使ってください。 |
| デモカメラが橋を通り抜ける | 衝突制御がありません。実際の地形コライダーと自分のゲーム用キャラクターで移動を確認してください。 |
| Animate To Profile を押しても何も変わらない | マテリアルの参照、移行先プロファイルのキャプチャ、チェック済みチャンネル、Dynamic Biomes の全体スイッチ、Playback Speed を確認します。個別の要求には一つのプロファイルで十分ですが、全シーケンスの再生には二つ以上必要です。 |
| プロファイル切り替え後に Resume が無効になる | Holding は移行が完了した状態です。見た目を変更するには別のプロファイルを要求してください。Resume は未完了で一時停止している移行を続けるための操作です。 |
| Play モード開始時に Wind が変わる | Wind のスイッチはシェーダーキーワードと対応するマテリアル値を一緒に保存します。マテリアル側で風を設定して保存し、要求したプロファイルの Wind チャンネルを確認してください。風データのない古いプロファイルは再キャプチャするまで現在値を維持します。グループごとの Enable Wind は別設定です。 |
| 洞窟のクリスタルが季節の影響を受ける | クリスタルの Scatter グループで Static Scatter を有効にし、プロファイルのスロットの対象バイオームを確認してください。同じバイオームを対象とするスロットが重複している場合、その Modifier は合成されます。 |
| ブラシを離しても Scatter が非表示のままになる | Disable While Brushing が有効な場合、ツールが選択されている間はストローク間も非表示です。サーフェスとジオメトリの両方のツールを None にするか、地形ツールウィンドウを閉じてください。 |
| Strength を 1 より大きくしても草が増えない | Scatter の Strength は 1 が上限です。最大配置密度を増やすにはグループの Density を上げ、その量を Strength または Scatter Density Response でフェードさせてください。 |
サポート
相談するときは、期待した結果、使った項目、実際に起きたことを説明してください。Unity のバージョン、選択したパイプライン、関連する設定のスクリーンショットも添えます。実行時の問い合わせの問題では、コライダーの種類と、最後にサーフェスデータをベイクした時期も記載してください。
DPT Games お問い合わせフォーム、または DPT Games Discord をご利用ください。