[Unity Shader Graph]バフ デバフ用の円筒エフェクトを作成する(初心者)
Unity version 2021.3.14f1
参考元
1、Shader Graphをインストール
レンダーパイプラインがURPやHDRPの場合はすでにインストールされているのでこの工程は不要
メニュー >> Window >> Package Managerでウィンドウを開く
PackagesのプルダウンメニューからUnity Registryを選択
Shader Graphをインストール
2、Shader Graphを作成
Projectウィンドウで右クリックからCreate >> Shader Graph >> URP >> Lit Shader Graph を選択してファイルを作成
Shader Graphファイルをダブルクリックするとウィンドウが開く
ウィンドウ上で右クリックからCreate NodeでNode検索ウィンドウが出てノードを作成できる
※Create NodeをクリックしてもNode検索ウィンドウが表示されない場合はShader Graphのウィンドウ上で左クリックしてみる
使用するノード
Color:色を出力
Add:2つの入力値を足し合わせる(加算)
Multiply:2つの入力値を掛け合わせる(乗算)
Blend:Baseになる入力値にもう一つの値をBlendするOpacityはBlendの強度
Float:値を1つ出力
Vector2:2つのfloat値を統合してVector2として出力
Boolean:trueとfalseの値を出力する ここではスクロール方向の切り替えに使用している
Branch:入力を切り変えることができるノード
Gradient:グラデーションを出力する
Sample Gradient:グラデーションを使うために必要なノード
Split:必要な値を取り出すノード
UV:UV座標をVector4で出力(よくわかっていない)
Texture 2D Asset:任意のテクスチャを出力
Sample Texture 2D:テクスチャを出力するために必要なノード
Rotate:UVを回転させるためのノード ここではテクスチャを回転させるために使用している
Tiling And Offset:タイリングするためのノード
One Minus:入力値に−1を掛けて出力する
Time:時間経過で変化する値を出力
3、ノードを作成
FragmentのBase Colorを黒にする
Colorノードを作成しFragmentのEmissionに繋ぐ
これがエフェクトの色になるそのColorノードを右クリックしConvert to >> Propertyでプロパティ化
Gradientノードを作成し任意のグラデーションを作成
Sample Gradientノードを作成しGradientノードを繋ぐ
UVノードを作成 Splitノードを作成
UVノードをSplitノードに繋ぐ
SplitノードのGをSample GradientノードのTimeに繋ぐ
グラデーションを横向きにしたい場合はRを繋ぐMultiplyノードを作成 floatノードを作成 floatの値は0.4(任意で調整)
Sample GradientノードをMultiplyノードのAに繋ぐ
FloatノードをMultiplyノードのBに繋ぐ
ここまでが色とグラデーションの作成
ここからはテクスチャの出力とスクロールの作成
Texture 2D Assetノードを作成 任意のテクスチャを設定
Sample Texture 2Dノードを作成 Texture 2D AssetノードをSample Texture 2DノードのTextureに繋ぐ
Tiling And Offsetノードを作成 Rotateノードを作成
RotateノードをSample Texture 2DノードのUVに繋ぐ
Tiling And OffsetノードをRotateノードのUVに繋ぐ
Tiling And OffsetノードのTilingを任意で調整
Floatノードを作成 FloatノードをRotateノードのRotationに繋ぐ
Floatノードをプロパティ化
ここではRotateという名前にしている 名前は任意
(画像を180度回転させたい場合は値を3.14)Vector2ノードを作成 Vector2ノードをTiling And OffsetノードのOffsetに繋ぐ
Branchノードを作成 BranchノードをVector2のyに繋ぐ(横にスクロールしたい場合はx)
Timeノードを作成 One Minusノード作成 Booleanノードを作成
Booleanノードをプロパティ化
ここではMoveDownという名前にしている 名前は任意BooleanノードをBranchのPredicateに繋ぐ
TimeノードをOn Minusノードに繋ぐ
TimeノードをBranchノードのTrueに繋ぐ
On MinusノードをBranchノードのFalseに繋ぐ
Blendノード作成 Sample Texture 2DノードをBlendノードのBlendに繋ぐ
グラデーションで作成したMultiplyをBlendノードのBaseに繋ぐ
Addノードを作成 MultiplyノードをAddノードのAにも繋ぐ
BlendノードをAddノードのBに繋ぐ
AddノードをFragmentノードのAlphaに繋ぐ
Alphaがない場合はGraph InspectorのGraph SettingsタブのSurface TypeをTransparentにする
Graph Inspectorが表示されていない場合はウィンドウの右上のGraph Inspectorをクリックメッシュの裏面を表示したい場合はGraph InspectorタブのRender FaceをBothにする
テクスチャのシーム部分に切れ目が出て気になる場合は
FragmentのSmoothnessとAmbient Occlusionの値を0にする
4、Materialを作成
Projectウィンドウで右クリックからCreate >> Materialで作成
MaterialファイルにShader Graphファイルをドラッグ&ドロップする
Materialファイルを選択しInspectorウィンドウでプロパティ化したノードのColor(色)とMoveDown(スクロール方向)とRotate(画像の回転)の値を入力してバフ用またはデバフ用に調整する
5、3DモデルにMaterialを設定
円筒形の3Dモデルを3Dツールで作成しテクスチャ展開してエクスポート
ここではBlenderで作成しfbxでエクスポートしているUnityにモデルをインポート
インポートしたファイルを選択してInspectorウィンドウのMaterialsタブで作成したMaterialファイルを設定