UnityのShader Graphは、コードを書かずに、ノードをつないでシェーダーを作るツールです。
最初の1つを作るまでの流れは、次のとおりです。
- Projectウィンドウで Create → Shader Graph → URP → Lit Shader Graph を選び、グラフを作る
- Shader Graphのウィンドウでノードを置き、Master Stackにつなぐ
- ウィンドウの左上の保存のボタン(Save)で保存する
- グラフのアセットを右クリックして Create → Material でマテリアルを作る
- マテリアルをシーンのオブジェクトにドラッグする
この記事では、この流れに加えて、Blackboardでプロパティを作り、マテリアルのInspectorやスクリプトから値を変える方法を説明します。
説明は、2026年10月18日に確認したShader Graph 17.3とUnityの公式資料に基づきます。
対象はUnity 6.3 LTSです。
画面は、Unity 6.6(6000.6.5f1、Shader Graph 17.6.0)のUniversal 3Dテンプレートで作った練習用のプロジェクトで、2026年10月20日に撮影しました。
グラフの作成、ノードの接続、プロパティの追加、マテリアルへの割り当て、記事のスクリプトでの色の変更までは、実機で確かめています。
Unity 6.3 LTSの画面と、HDRP・Built-inでの動きは確かめていません。
画面の名前は英語版の表記です。
2026年10月26日に、Unity 6.3のRenderer.materialとMaterial.HasPropertyの公式仕様を再照合しました。
以下の画像と色変更の結果は2026年10月20日の記録で、今回は再実行・画面確認をしていません。
Shader Graphを使える環境
Shader Graphのドキュメントでは、URPかHDRPを入れると、Shader Graphのパッケージも自動で入ると説明されています。
Unity 6.3のマニュアルでは、Shader Graphはエディタの版に合わせて版が固定されるコアパッケージとして扱われています。
| レンダーパイプライン | Shader Graphの扱い |
|---|---|
| URP | インストールすると自動で入る |
| HDRP | インストールすると自動で入る |
| Built-in | Unity 2021.2以降はPackage Managerで入れれば使える。互換のためのもので、不具合の修正以外の更新はない |
同じページでは、Built-inでShader Graphを使う場合、XRに対応せず、GPU Instancingも効かないとされています。
Unityの公式ドキュメントは、新しくShader Graphを使う場合にURPまたはHDRPを推奨しています。
この記事ではURPでの手順を説明します。
Unity 6.6のUniversal 3Dテンプレートで作ったプロジェクトでは、Package Managerで何も追加しなくても、URPと一緒にShader Graph 17.6.0が入っていて、そのまま使えました。
レンダーパイプラインの違いは、URP・HDRP・Built-inの違いと選び方で説明しています。
グラフを作る3つの方法
Shader Graphのアセットは、Projectウィンドウの右クリックメニューの Create → Shader Graph から作ります。
| メニュー | できるもの |
|---|---|
| From Template | テンプレートの一覧から選んで作る。一覧はプロジェクトのレンダーパイプラインに合わせて表示される |
| URP → Lit など | レンダーパイプラインとシェーダーの種類を決めた状態で作る |
| Blank Shader Graph | 空のグラフを作る。使うにはGraph Settingsでターゲットを決める必要がある |
最初は、URPのプロジェクトなら Create → Shader Graph → URP → Lit Shader Graph で作るのが、公式の入門の例と同じ手順です。
Unity 6.6では、URPの中の項目は Lit Shader Graph・Unlit Shader Graph のように、名前の後ろに Shader Graph が付いた形で並んでいました。

Shader Graphのウィンドウの見方
作ったアセットに名前を付けると、Shader Graphのウィンドウが開きます。
開かない場合は、アセットをダブルクリックします。
Unity 6.6では、最初にグラフを作ったときに、作成と同時に開くかどうかを聞く確認(Shader Graph Preferences)が出ました。
Yes を選ぶと、名前を付けた直後にShader Graphのウィンドウが開き、SceneやGameのビューと同じ場所にタブとして並びました。
確認の文では、この設定は後からEditorのPreferencesで変えられると案内されています。
| 部分 | 役割 |
|---|---|
| Master Stack | シェーダーの最終的な見た目を決める終点。VertexとFragmentの2つの区画がある |
| Blackboard | マテリアルから変えられるプロパティやキーワードを作って管理する |
| Graph Inspector | 選んだノードやプロパティの設定(Node Settings)と、グラフ全体の設定(Graph Settings)を変える |
| Main Preview | シェーダーの見た目をその場で表示する。ドラッグで回し、ホイールで拡大縮小できる |
Master Stackのドキュメントでは、Vertexの区画につないだノードは頂点の処理に、Fragmentの区画につないだノードはピクセルの処理になると説明されています。
色を変えるだけなら、Fragmentの区画にある Base Color につなぎます。
Unity 6.6で Lit Shader Graph を作ると、Vertexには Position・Normal・Tangent、Fragmentには Base Color・Normal (Tangent Space)・Metallic・Smoothness・Emission・Ambient Occlusion が最初から並んでいました。
この確認では、Main Previewの枠は表示されたものの、中の球は最後まで描かれませんでした。
同じときに、マテリアルのInspectorのプレビューとSceneビューの球には、グラフの色が出ていました。
Main Previewが空のままでも、色が付いたかはマテリアルのプレビューで確かめられます。
ノードを置いて色を付ける
- Shader Graphのウィンドウの何もない場所を選び、スペースキーを押す
- Create Nodeのメニューの検索欄に color と入力する
- Input → Basic の Color をダブルクリックして置く
- Colorノードの Out(4) の端子を、Fragmentの Base Color の端子へドラッグする
- Colorノードの色の帯をクリックし、色を選ぶ
公式の例では、つないだ直後はColorノードの初期値が黒のため、Main Previewの球は黒く表示されます。
実機でも、置いた直後のColorノードの色の帯は黒で、色を選ぶ画面の値はR・G・B・Aがすべて0でした。
ドキュメントでは、色を選ぶとMain Previewの色がその場で変わると説明されています。
検索欄に color と入れた一覧には、VFXのColorなど同じ名前のノードがほかにもあり、この確認では一覧の一番下の VFX → Particles → Color が選ばれた状態で表示されました。
一覧を上へ戻して、Input → Basic の下の Color を選んでください。

最後に、ウィンドウの左上の保存のボタンで保存します。
Unity 6.6では、このボタンはディスクの絵だけで、ポインターを乗せると Save と表示されました。
隣の▼には、Save As...・Show In Project・Check Out がありました。
保存していない間は、タブのグラフの名前の後ろに * が付きます。
保存していない変更は、マテリアルには反映されません。
マテリアルを作ってオブジェクトに付ける
- Projectウィンドウで、保存したShader Graphのアセットを右クリックする
- Create → Material を選ぶ
- できたマテリアルを、シーンのオブジェクトにドラッグする
ドキュメントでは、この方法で作ったマテリアルには、元のShader Graphが自動で割り当てられると説明されています。
マテリアルのInspectorの Shader の欄に、グラフの名前が表示されていれば割り当てられています。
実機では、TintLit という名前のグラフから作ったマテリアルの Shader の欄に、Shader Graphs/TintLit と表示されました。
この確認では、できたマテリアルに TintMat と名前を付け、SceneビューのSphereへドラッグして付けました。
既にあるマテリアルを使う場合は、Inspectorの Shader の欄から、作ったグラフを選びます。
プロパティでInspectorから色を変える
Colorノードの色はグラフの中に固定されるため、マテリアルごとに色を変えたい場合は、プロパティを使います。
- Blackboardの Add (+) を押し、Color を選ぶ
- できたプロパティを選び、Graph Inspectorの Node Settings で Name を分かりやすい名前にする
- Show In Inspector がオンになっていることを確かめる
- プロパティをBlackboardからウィンドウの作業領域へドラッグする
- プロパティのノードを、Colorノードの代わりに Base Color へつなぐ
- 保存のボタン(Save)で保存する
Unity 6.6では、Add (+) の一覧に Float・Vector 2〜4・Color・Boolean・Gradient・Texture 2D などが並び、Color を選んだ直後にBlackboardで名前を入力する欄が開きました。
ここで Tint と入力すると、Graph Inspectorの Name は Tint、Reference は _Tint になり、Scope は Per Material、Show In Inspector はオンになっていました。
プロパティのノードを Base Color へつなぐと、それまでのColorノードからの線は外れました。

保存してマテリアルのInspectorに戻ると、作ったプロパティが表示されます。
実機では、マテリアルのInspectorの Surface Inputs に Tint の色の欄が出ました。
プロパティの既定値(Default Value)が黒のままだったので、保存した直後は球が黒くなり、Inspectorの Tint で色を選ぶと、Sceneビューの球がその色に変わりました。

ドキュメントでは、Inspectorで変えた値は、そのマテリアルを使うすべてのオブジェクトに反映されると説明されています。
オブジェクトごとに違う色にしたい場合は、マテリアルを複数作ります。
よく使うプロパティの種類
| 種類 | マテリアルのInspectorでの表示 |
|---|---|
| Color | 色を選ぶ欄 |
| Float | 数値の欄。Modeを Slider にするとスライダーになる |
| Texture 2D | テクスチャを選ぶ欄。グラフでは Sample Texture 2D ノードにつないで使う |
| Boolean | オン・オフの欄 |
Sample Texture 2D ノードは、Create Nodeのメニューの Input → Texture にあります。
NameとReferenceの違い
| 項目 | 役割 |
|---|---|
| Name | マテリアルのInspectorに表示される名前 |
| Reference | シェーダーの中で使う名前。スクリプトから値を変えるときはこちらを使う |
| Show In Inspector | オンにするとマテリアルのInspectorに表示される |
| Scope | Per Material はマテリアルごとに値を持つ。Global は、同じグローバルプロパティを使うマテリアルで値を共有する |
ドキュメントでは、Referenceを自分で書き換えたとき、先頭がアンダースコアでなければ自動で付き、HLSLで使えない文字は取り除かれると説明されています。
Referenceを自分で書き換える操作は、この確認では試していません。
スクリプトから値を変える
プロパティの値は、スクリプトから Material.SetColor などで変えられます。
次の例は、Referenceが _Tint のColorプロパティを、再生したときに赤にするものです。
using UnityEngine;
public class ChangeTint : MonoBehaviour
{
// Shader GraphのプロパティのReferenceと同じ名前にする
static readonly int TintId = Shader.PropertyToID("_Tint");
void Start()
{
var material = GetComponent<Renderer>().material;
material.SetColor(TintId, Color.red);
}
}このコードは、スクリプトリファレンスのRenderer.material、Material.SetColor、Shader.PropertyToIDの記載をもとにしたものです。
Unity 6.6で、このコードを改変せずに ChangeTint.cs として保存し、Component → Scripts → Change Tint でSphereに付けて再生すると、Gameビューの球が赤くなりました。
Consoleにエラーや警告は出ませんでした。
再生中のInspectorでは、マテリアルが TintMat (Instance) という複製に替わっていて、再生を止めた後の TintMat の Tint は元のオレンジのままでした。

この例は、同じGameObjectにRendererがあり、最初のマテリアルが_Tintプロパティを持つことを前提にしています。
Renderer.materialは最初のマテリアルを取得し、他のRendererと共有している場合は複製します。
そのため、このコードで変更するのは、このRendererが使う最初のマテリアルです。
同じページでは、こうして作られたマテリアルは、オブジェクトを破棄するときに自分で破棄する必要があるとされています。
上のChangeTintは色変更だけの最小例で、生成したマテリアルを破棄する処理は含んでいません。
ゲーム内で繰り返し生成・破棄する場合は、取得したマテリアルをクラスのフィールドに保持し、OnDestroyでそのインスタンスをDestroyします。
破棄のためにRenderer.materialを取り直さず、自分が生成して保持した参照を使います。
Shader.PropertyToIDは、プロパティの名前を数値のIDに変えるもので、何度もSetColorを呼ぶ場合は文字列で渡すより効率がよいと説明されています。
うまくいかないときの確認
上のコードで取得したmaterialについて、変更対象のマテリアルに_Tintがあるかをmaterial.HasProperty(TintId)で調べられます。
HasPropertyはプロパティの存在を調べるAPIで、色への接続や描画結果までは確認しません。
存在するのに変化しない場合は、TintノードがBase Colorへつながっているか、保存済みか、表示中のRendererのマテリアルを変更しているかを確認します。
判定の範囲は公式のMaterial.HasPropertyリファレンスで確認できます。
| 症状 | 確かめること |
|---|---|
| マテリアルがピンク(マゼンタ)になる | グラフのターゲットと、プロジェクトのレンダーパイプラインが合っているか |
| グラフを変えても見た目が変わらない | 保存のボタン(Save)で保存したか。タブの名前に * が残っていないか |
| プロパティがInspectorに出ない | Show In Inspector がオンか、Scope が Global になっていないか、保存したか |
| スクリプトから色が変わらない | SetColorに渡した名前がNameではなくReferenceか |
| 一部のブロックが灰色になっている | Graph Settingsの設定で、そのブロックが使われない状態になっている |
Master Stackのドキュメントでは、Graph Settingsを変えると一部のブロックが使われない状態になり、そのブロックと、そこだけにつながったノードは灰色で表示されると説明されています。
Blank Shader Graphで作った場合は、Graph InspectorのGraph Settingsで、Active Targetsにレンダーパイプラインを追加します。
ピンクになる原因の詳しい切り分けは、マテリアルがピンク(マゼンタ)になる原因と直し方で説明しています。
Shader Graphのドキュメントでは、古いチュートリアルはMaster Stackができる前のマスターノードの画面で説明されていることがあると注意書きがあります。
検索で見つけた解説の画面が今と違う場合は、版を確かめてください。
参考にした公式ページ
- Shader Graph 17.3:Install Shader Graph
- Shader Graph 17.3:Create a shader graph asset
- Shader Graph 17.3:Create a shader graph and use it with a material
- Shader Graph 17.3:Master Stack
- Shader Graph 17.3:Blackboard
- Shader Graph 17.3:Property Types
- Shader Graph 17.3:Graph Settings tab reference
- Renderer.material(スクリプトリファレンス)
- Material.SetColor(スクリプトリファレンス)
