表示テーマ
DecalProjector Component
箱の範囲内の表面へ色・法線・質感・発光を投影します。傷や汚れに使います。
設定する手順
- Decal用Materialを選び、投影箱が受け取り先の表面に交わるよう配置します。
- SceneViewまたはGameViewで結果を確認します。
- 編集中のSceneまたはPrefabを保存します。
項目の説明
| 項目 | C#名 | 型 | 操作 | 定義時の初期値 | 意味 |
|---|---|---|---|---|---|
| マテリアル | material | Material? | 読取・変更 | {} | 描画に使うMaterial参照です。既定MaterialはEngine側から解決されます。 |
| 有効 | enabled | bool | 読取・変更 | true | このComponentの処理を有効にします。GameObject全体のアクティブ状態とは別です。 |
| 大きさと奥行き | size | Vector3 | 読取・変更 | {1.0f, 1.0f, 0.1f} | 形状の幅・高さ・奥行きです。TransformのScaleも掛かります。 |
| 中心のオフセット | pivot | Vector3 | 読取・変更 | {} | 形状の原点または投影中心をずらします。 |
| 乗算色 | color | Color4 | 読取・変更 | Color4::White() | 色を指定します。RGBAではAlphaも持ちます。 |
| 不透明度 | fadeFactor | float | 読取・変更 | 1.0f | Decalの不透明度倍率です。0で透明、1で元の不透明度です。 |
| UVスケール | uvScale | Vector2 | 読取・変更 | {1.0f, 1.0f} | UVへ掛ける拡縮倍率です。 |
| UVオフセット | uvBias | Vector2 | 読取・変更 | {} | UVへ加える移動量です。 |
| UV回転 | uvRotation | float | 読取・変更 | 0.0f | UVの回転角です。APIの値はラジアンです。 |
| 重なり順 | sortOrder | int | 読取・変更 | 0 | Decalの重なり順です。 |
| 描画距離 | drawDistance | float | 読取・変更 | 1000.0f | 描画する距離の上限です。 |
| 距離フェード開始 | fadeScale | float | 読取・変更 | 0.9f | 描画距離に対してフェードを始める比率です。 |
| 角度フェード開始 | startAngleFade | float | 読取・変更 | 60.0f | 受け取り面の角度によるフェード開始角です。単位は度です。 |
| 角度フェード終了 | endAngleFade | float | 読取・変更 | 85.0f | 角度フェードで完全に消える角度です。単位は度です。 |
| renderingLayerMask | renderingLayerMask | uint | 読取・変更 | 1u | このRendererを表示するCameraのCullingMaskと照合するbit集合です。 |
| receiverRenderingLayerMask | receiverRenderingLayerMask | uint | 読取・変更 | kRenderingLayerMaskBits | Decalを受け付けるRendererの描画Layerを選びます。 |
Inspectorの設定と使い方
「Editor / C#」は両方から変更できる設定、「Editorのみ」は公開C# APIのない編集操作です。「Editor表示のみ」は計算結果や統計などの確認欄です。「C#のみ」は、このInspectorに編集欄のない操作です。
| 設定・操作 | 編集場所 | C#の入口 | 意味・使い方 |
|---|---|---|---|
| Material・個別Material | Editor / C# | material / MaterialInstance | デカール用Materialを使います。個別設定のベースカラー・法線・質感・発光Texture、適用フラグはMaterialInstanceのParameter上書きです。共有Material Assetの変更と区別します。 |
| 表示・受け取り先レイヤー | Editor / C# | renderingLayerMask / receiverRenderingLayerMask | 表示レイヤーはCameraへの選別、受け取り先は投影するRendererの選別です。受け手のreceiveDecalsも有効にします。 |
| 大きさと奥行き・中心オフセット | Editor / C# | size / pivot | 投影箱が受け取り面へ交差するよう配置します。奥行きを大きくしすぎると、手前の壁以外にも投影されやすくなります。向きはTransformで決めます。 |
| 乗算色・不透明度・UV・重なり順 | Editor / C# | color / fadeFactor / uvScale / uvBias / uvRotation / sortOrder | Materialへさらに色とAlphaを掛けます。fadeFactorを時間で下げると消滅フェードに使えます。UVは貼り方、sortOrderは重なるデカールの並びです。 |
| 描画距離・距離フェード・角度フェード | Editor / C# | drawDistance / fadeScale / startAngleFade / endAngleFade | 遠距離や投影面の傾きに応じて目立たなくします。drawDistanceは表示距離、fadeScaleはその距離に対するフェード開始の割合、角度は開始から終了の間で薄くする範囲です。 |
初期値はEngineのComponent定義時の値で、C++表記を含みます。C#へ貼り付ける実行例ではありません。既存Sceneの保存値や既定Assetがある場合はそちらが優先されます。数値の編集範囲はInspectorで制限される場合があります。
C#から使う
操作型はDecalProjectorです。 GameObjectから取得する基本操作はGameObjectの操作を参照してください。以下には基本プロパティだけでなく、公開関数・追加の設定API・継承した共通操作も掲載します。
実用例:傷を一定時間残してAlphaで消す
傷のDecalProjectorと同じGameObjectへ追加します。Materialと投影範囲はEditorで設定します。
cs
using NEMEngine;
public sealed class DecalLifetime : MonoBehaviour {
[SerializeField, Min(0.01f)] private float lifetime = 5.0f;
[SerializeField, Min(0.01f)] private float fadeDuration = 1.0f;
private DecalProjector? decal;
private float elapsed;
void Start() {
// 投影設定を持つDecalProjectorを保持
decal = GetComponent<DecalProjector>();
}
void Update() {
// 寿命の終わりだけAlphaを下げる
if (decal == null) return;
elapsed += Time.deltaTime;
float fade = MathF.Max(0.01f, MathF.Min(fadeDuration, lifetime));
float progress = (elapsed - (lifetime - fade)) / fade;
decal.fadeFactor = Mathf.Clamp(1.0f - progress, 0.0f, 1.0f);
// 透明になった後に投影用のGameObjectを破棄
if (elapsed >= lifetime) NEMEngine.Object.Destroy(gameObject);
}
}設定用・関連するC#型
DecalProjector
| 宣言・詳説 | 種類・操作 | 役割 |
|---|---|---|
public static DecalProjector FromEntity(GameObject gameObject) | 関数 | 既にComponentを持つGameObjectから操作用の参照を作ります。Componentを追加する操作ではありません。 |
public MaterialInstance MaterialInstance | プロパティ(読取専用) | このRendererだけに適用するMaterial Parameterです。共有Materialの変更とは区別します。 |
public Color4 color | プロパティ(読取・変更) | 色を指定します。RGBAではAlphaも持ちます。 |
public static int componentTypeID | プロパティ(読取専用) | 組み込みComponentの接続識別子です。通常のゲームコードではGetComponentで取得します。 |
public float drawDistance | プロパティ(読取・変更) | 描画する距離の上限です。 |
public bool enabled | プロパティ(読取・変更) | このComponentの処理を有効にします。GameObject全体のアクティブ状態とは別です。 |
public float endAngleFade | プロパティ(読取・変更) | 角度フェードで完全に消える角度です。単位は度です。 |
public float fadeFactor | プロパティ(読取・変更) | Decalの不透明度倍率です。0で透明、1で元の不透明度です。 |
public float fadeScale | プロパティ(読取・変更) | 描画距離に対してフェードを始める比率です。 |
public Material? material | プロパティ(読取・変更) | 描画に使うMaterial参照です。既定MaterialはEngine側から解決されます。 |
public Vector3 pivot | プロパティ(読取・変更) | 形状の原点または投影中心をずらします。 |
public uint receiverRenderingLayerMask | プロパティ(読取・変更) | Decalを受け付けるRendererの描画Layerを選びます。 |
public uint renderingLayerMask | プロパティ(読取・変更) | このRendererを表示するCameraのCullingMaskと照合するbit集合です。 |
public Vector3 size | プロパティ(読取・変更) | 形状の幅・高さ・奥行きです。TransformのScaleも掛かります。 |
public int sortOrder | プロパティ(読取・変更) | Decalの重なり順です。 |
public float startAngleFade | プロパティ(読取・変更) | 受け取り面の角度によるフェード開始角です。単位は度です。 |
public Vector2 uvBias | プロパティ(読取・変更) | UVへ加える移動量です。 |
public float uvRotation | プロパティ(読取・変更) | UVの回転角です。APIの値はラジアンです。 |
public Vector2 uvScale | プロパティ(読取・変更) | UVへ掛ける拡縮倍率です。 |
継承する共通操作:Component
継承する共通操作:Object
使用時の注意
受け取り側RendererのReceiveDecalsと受け取り先レイヤーを確認します。透明物への投影とは区別してください。
Play中の変更は実行用Worldへ反映します。Scene編集のUndoと実行中の値の変更は別です。保存方法は編集と実行時変更を参照してください。