# 第10回 メッシュとシェーダーによる斬撃のサンプル

スライドの進行に合わせて、テクスチャーの移動から濃度制御までの6段階を比較できます。各段階は既存の`CrescentSlash.prefab`を共通の親とするPrefab Variantで、対応する`Shaders/Steps`のGraphを使用します。

メッシュは元の`Ring.fbx`です。教材本文の`CrescentMesh.cs`による生成とは異なります。

## プレビューの操作

[Scenes/10_MeshSlash.unity](Scenes/10_MeshSlash.unity)を開き、Hierarchyの`Samples`を展開します。初期状態では`00 Horizontal Schroll`だけが有効です。表示中の作例をInspector上部のチェックで無効にしてから、次の作例を有効にしてください。6個は同じ位置にあるため、一度に1個ずつ表示して比較します。表示だけを切り替える場合、Prefabへ変更を適用する必要はありません。

| 段階・Prefab Variant | 観察する内容 | 操作する箇所 |
| --- | --- | --- |
| [00 Horizontal Schroll](<Prefabs/Steps/00 Horizontal Schroll.prefab>) | 元の矢印テクスチャーをリングのUVに沿って移動する | Materialの`Phase`を0〜1で変更する。初期値は0 |
| [01 Procedural Gradient](<Prefabs/Steps/01 Procedural Gradient.prefab>) | テクスチャーの絵からUVの計算によるグラデーションへ進む | Materialの`Phase`を変更し、斜めの形と折り返しを見る。初期値は0 |
| [02 Gradient Map](<Prefabs/Steps/02 Gradient Map.prefab>) | Gradientによる着色とAlphaを加える | `Phase`を変更して形を比較する。Gradientの色・Alphaを変える場合はGraphを編集して保存する |
| [03 With Noise](<Prefabs/Steps/03 With Noise.prefab>) | 斬撃にノイズの濃淡を加える | 同じ`Phase`で02と比較する。初期値は0 |
| [04 Animation](<Prefabs/Steps/04 Animation.prefab>) | Timeによってノイズを流す | Play中にMaterialの`Speed`を変更する。初期値は`Phase = 1`、`Speed = -0.5` |
| [05 Intensity](<Prefabs/Steps/05 Intensity.prefab>) | 濃度制御を加え、既存のカーブで斬撃を再生する | Playで表示し、`Crescent Slash`コンポーネントのPhase Curve・Intensity Curveを確認する |

00〜04では`Crescent Slash`コンポーネントを無効にしています。スクリプトがMaterialの値を上書きしないため、Rendererに割り当てられたMaterialを選んで各段階の公開値を操作できます。00〜03はPlayせずに形とPhaseを比較できます。04のTimeによる流れはPlayで確認してください。

05では親Prefabから元の再生設定を継承しています。Play時はスクリプトがMaterialPropertyBlockでPhase・Speed・IntensityをRendererへ渡すため、再生中の値はMaterial側の数値表示とは一致しません。Life Timeは1秒、Loopは有効、Loop Intervalは1秒です。

Scene内のGameObjectやコンポーネントをPlay中に変更した内容は、停止すると戻ります。一方、MaterialやShader Graphなどのアセット変更は停止しても残ります。比較後は表の初期値に戻し、独自の調整を残す場合は先に対象のMaterial・Graphを複製してください。

開始時の表示を変更する場合は、Playを停止してから有効状態を変更し、Sceneを保存します。

## 継承と共有

6個のVariantは、前段階を順に継承する構成ではなく、すべて同じ`CrescentSlash.prefab`を直接継承しています。共通のメッシュと基本設定を共有し、各段階でMaterialと再生コンポーネントの有効状態を上書きしています。05は元の最終段のMaterial・再生設定をそのまま使用します。

00〜04のMaterialは各Graphの初期設定を使用します。00の画像は既存の`Shared/Textures/UV Arrow.psd`です。

## 主な入口

- [段階比較Scene](Scenes/10_MeshSlash.unity)
- [共通の親Prefab](Prefabs/CrescentSlash.prefab)

Sceneを開き、Playで見本を観察します。設定を比較するときはPlayを終了して一つの値だけ変更し、同じカメラ・条件で再生してください。

## ファイル一覧

- [Materials/Crescent Slash.mat](<Materials/Crescent Slash.mat>)
- [Materials/Steps/00 Horizontal Schroll.mat](<Materials/Steps/00 Horizontal Schroll.mat>)
- [Materials/Steps/01 Procedural Gradient.mat](<Materials/Steps/01 Procedural Gradient.mat>)
- [Materials/Steps/02 Gradient Map.mat](<Materials/Steps/02 Gradient Map.mat>)
- [Materials/Steps/03 With Noise.mat](<Materials/Steps/03 With Noise.mat>)
- [Materials/Steps/04 Animation.mat](<Materials/Steps/04 Animation.mat>)
- [Models/Ring.fbx](<Models/Ring.fbx>)
- [Models/Semi-Ring.fbx](<Models/Semi-Ring.fbx>)
- [Prefabs/CrescentSlash.prefab](<Prefabs/CrescentSlash.prefab>)
- [Scenes/10_MeshSlash.unity](Scenes/10_MeshSlash.unity)
- [Scripts/CrescentSlash.cs](<Scripts/CrescentSlash.cs>)
- [Settings/Global Volume Profile.asset](<Settings/Global Volume Profile.asset>)
- [Shaders/Steps/00 Horizontal Schroll.shadergraph](<Shaders/Steps/00 Horizontal Schroll.shadergraph>)
- [Shaders/Steps/01 Procedural Gradient.shadergraph](<Shaders/Steps/01 Procedural Gradient.shadergraph>)
- [Shaders/Steps/02 Gradient Map.shadergraph](<Shaders/Steps/02 Gradient Map.shadergraph>)
- [Shaders/Steps/03 With Noise.shadergraph](<Shaders/Steps/03 With Noise.shadergraph>)
- [Shaders/Steps/04 Animation.shadergraph](<Shaders/Steps/04 Animation.shadergraph>)
- [Shaders/Steps/05 Intensity.shadergraph](<Shaders/Steps/05 Intensity.shadergraph>)
- [Shaders/SubGraphs/Phased UV.shadersubgraph](<Shaders/SubGraphs/Phased UV.shadersubgraph>)

設定を変更する場合は、Sceneと変更対象のPrefab・Materialを自分の作業フォルダへ複製し、共通の見本へ影響しないようにします。

[サンプル一覧](../../../README.md)
