0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity6.3】UI ToolkitとShaderで遊ぶ

Last updated at Posted at 2025-12-24

はじめに

メリークリスマス、CyberAgent26卒内定者でゲームクライアントエンジニアとして入社予定のぬまちです。
この記事はCyberAgent26卒内定者によるアドベントカレンダーの24日目として投稿しています。クリスマスですね🎄

個人的にグラフィックス領域に興味があり、Unity6.3でUI ToolkitにCustomShaderが対応したとのことで、ちょっと遊んでみたという内容になっています。

使用技術

  • Unity 6.3LTS (6000.3.2f1)
  • Universal Render Pipeline 17.3.0
  • Shader Graph 17.3.0

今回つくったもの

導入ということでかなり簡易的ですが、ボタンを押したらディゾルブで消えていくというものを作ってみました。ちなみに一切クリスマスとは関係ない表現です。

unity6-graphics-study - Demo - Windows, Mac, Linux - Unity 6.3 LTS (6000.3.2f1) DX12 2025-12-25 03-56-49 (online-video-cutter.com).gif

実装

1. UI BuilderでButtonを配置

VisualElement配下に適当なButtonを追加します。その後、いい感じにレイアウトを整えます。
image.png

UI Builder上での細かい配置手順などは今回割愛します。高橋 啓治郎さんの講演がすごくわかりやすいので参考にすると良いと思います。https://www.youtube.com/watch?v=GFxOCdHwWZA

2. テクスチャの設定

次にボタンのテクスチャを設定します。何でもよいです。ここで設定したテクスチャにディゾルブをかけていくので、見た目に影響してきます。
今回は燃えるような表現をしているので、紙っぽいテクスチャをネットから拾ってきました。
ButtonのInspector > Background > Imageにテクスチャセットします。

image.png

3. ShaderGraph作成

いよいよシェーダーの作成に移ります。
Projectウィンドウで右クリックし、Create > Shader Graph > URP > UI Shader Graphから作成できます。

shadergraph_guide.jpg

今回作成したシェーダーの全体像はこんな感じになっています。

image.png

構成としては以下のようになっています。

1. テクスチャ入力部分(左上)

  • Default Texture: 様々なテクスチャパラメータ(UVSet0、Tiling、TextureH、SSR(Add)、Erosion Tex0/1、Dissolve0/1)を持つテクスチャ群
  • Render Type Blend: ブレンドモードの設定

2. ノイズテクスチャ生成(左側)

  • Sample Texture 2D: ノイズテクスチャ(灰色のざらざらした画像)をサンプリング
  • このノイズがディゾルブの境界パターンを決定

3. ディゾルブの境界制御(中央)

  • Step ノード: ノイズテクスチャの値と閾値を比較し、白黒のマスクパターンを生成
  • 複数のStepノードが使用されており、段階的なディゾルブ効果を作成

4. 境界線の色付け(右下)

  • One Minus ノード: マスクを反転
  • Subtract ノード: 2つのマスクの差分を取り、境界線部分を抽出
  • Multiply ノード: 境界線にカラー(オレンジ色)を適用

5. 最終出力(右側)

  • Fragment シェーダー: Base Color(基本色)とAlpha(透明度)に接続
  • Vertex シェーダー: 頂点処理に接続

4. マテリアル作成と割り当て

シェーダーが完成したら新たにマテリアルを作成し、今作ったディゾルブシェーダーを割り当てます。

image.png

UI Builderへ戻り、ButtonのInspector > Material > Materialに作成したマテリアルをセットします。

5. ディゾルブアニメーション実装

ボタンを押したときのコールバック処理と、アニメーションを実装します。アニメーションにはDOTweenを使用しました。

public class DissolveButton : MonoBehaviour
{
    [SerializeField] private UIDocument _uiDocument;
    [SerializeField] private Material _dissolveMaterial;
    
    private void Start()
    {
        var root = _uiDocument.rootVisualElement;
        var button = root.Q<Button>();
        button.clicked += OnDissolveButtonClicked;
    }
    
    private void OnDissolveButtonClicked()
    {
        _dissolveMaterial.DOFloat(1.0f, "_Threshold", 1.0f);
    }
}

DissolveButtonをUI Documentがアタッチされているオブジェクトに取り付けます。UI Documentと作成したMaterialへの参照を忘れずに設定してください。

image.png

これで実装は完了です。実行してみましょう!

さいごに

今回の6.3アップデートでUI Toolkitを使う上での表現の幅がかなり広がったのではないでしょうか?まだまだ業界的にはuGUIを使っているケースが多いと思いますが、近いうちUI Toolkitの時代がやってくる気がしてます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?