Unity Shader Graph とスクリプトを使用したエミッションカラーの変更

概要

この技術資料では、UnityでShader Graphとスクリプトを使用してエミッションカラーを動的に変更する方法について説明します。このプロジェクトを通して、シーン内で立方体のエミッション効果を操作し、視覚的なフィードバックを向上させる手法を学びます。


ステップ1: プロジェクト設定

  1. Unityバージョン: Unity 6.0.0(スクリーンショット)
    • プロジェクト名:ShaderGraphUV(サンプル)
  2. Shader Graphの確認:
    • Unity 6ではShader Graphはデフォルトでインストールされています。

ステップ2: Shader Graphとマテリアルの作成

  1. Shader Graphの作成:
    • 新しいShader Graphを作成し、エミッションカラーを制御するための_EmissionColorプロパティを追加します。
    • 「Sample Texture 2D」ノードを接続し、スクリーンショットで示されているようにUV座標を操作します。
  2. マテリアルの作成:
    • Shader Graphを作成した後、新しいマテリアルを作成し、そのShader Graphを適用します。

ステップ3: スクリプトの作成

以下のC#スクリプトを作成します。

using UnityEngine;

public class ChangeEmissionColor : MonoBehaviour
{
    public Material material;

    void Start()
    {
        if (material != null)
        {
            // エミッションカラーを青に設定(RGB: (0, 0, 1)、強度: 2.0)
            Color emissionColor = new Color(0.0f, 0.0f, 1.0f) * 2.0f;

            // マテリアルに色を適用
            material.SetColor("_EmissionColor", emissionColor);

            // エミッションを有効化
            material.EnableKeyword("_EMISSION");
        }
    }
}

コードのポイント

  • material.SetColor("_EmissionColor", emissionColor);: Shader Graphのプロパティに直接アクセスしてエミッションカラーを変更します。
  • material.EnableKeyword("_EMISSION");: マテリアルのエミッション効果を有効化します。

ステップ4: ポストエフェクト効果の追加

シーンにGlobal Volumeを追加し(標準で追加されているはず)、Bloomエフェクトを有効にします。スクリーンショットのように、IntensityThresholdを調整してエミッションカラーをより際立たせます。

ステップ5: Unityでの実装

  1. ゲームオブジェクトのセットアップ:
    • シーンにCubeを配置し、作成したマテリアルを適用します。
  2. スクリプトのアタッチ:
    • ChangeEmissionColorスクリプトをCubeオブジェクトに追加し、作成したマテリアルを指定します。
  3. 動作確認:
    • 再生ボタンを押して、エミッションカラーが変更されることを確認します。

トラブルシューティング

エミッションが動作しない場合:

  • Shader Graphの_EmissionColorプロパティが正しく設定されているか確認してください。
  • マテリアルに正しいShader Graphが適用されているか確認してください。

スクリプトエラー:

  • materialnullの場合、インスペクターで正しいマテリアルが指定されているか確認してください。

応用例

  • 時間経過やプレイヤーの行動に応じてエミッションカラーを変化させる。
  • 複数のオブジェクトにスクリプトを適用し、シーン内で動的な視覚フィードバックを演出する。

Post-Process,Shader,Unity

Posted by hidepon