UnityUnityメモ

Unity初心者向け!マテリアルの透明度でオブジェクトを点滅させる方法

Unity

1. はじめに

Unityでオブジェクトを点滅させたいとき、皆さんはどのような方法を思い浮かべますか?オブジェクトを「消す・表示する」を繰り返す方法もありますが、これだと少し不自然に見えることがありますよね。そこで今回は、「透明度」を変化させて、オブジェクトがなめらかにフェードイン・フェードアウトしているように見せる方法をご紹介します。

この方法は、ゲーム中の警告ライトや特殊なエフェクトとして活用できるだけでなく、視覚的に美しい効果を簡単に追加することができます。また、初心者の方でも実践しやすいように、ステップごとに分かりやすく解説します。


この記事を読み終えた頃には、以下のことができるようになります:

  • Unityで透明度を変化させるスクリプトを作成する
  • フェードイン・フェードアウトを繰り返す点滅効果を実装する
  • オリジナルのカスタマイズアイデアを試してみる

それでは、準備から実際のスクリプト作成まで一緒に進めていきましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. 必要な準備

Unityでオブジェクトを点滅させるには、以下の準備が必要です。この記事では、シーンにオブジェクトを配置し、それに透明度を操作できるマテリアルを設定する手順を説明します。初心者でも迷わないように、ステップごとに丁寧に解説します!


2.1 シーンにオブジェクトを配置する

まずは、点滅させる対象となるオブジェクトをシーンに配置しましょう。今回はシンプルな立方体(Cube)を使用します。

  1. ヒエラルキーウィンドウで右クリックします。
  2. 表示されたメニューから「3D Object」→「Cube」を選択します。
  3. シーンビューに立方体が表示されます。

これで、シーンに立方体を配置できました!


2.2 マテリアルを作成する

次に、透明度を操作できるマテリアルを作成します。このマテリアルは、後でスクリプトを使用して透明度を変化させるために必要です。

  1. プロジェクトウィンドウで右クリックします。
  2. メニューから「Create」→「Material」を選択します。
  3. 新しいマテリアルが作成されるので、名前を「BlinkingMaterial」に変更します。

2.3 マテリアルに透明度を設定する

透明度を操作するためには、マテリアルの「Rendering Mode」を変更する必要があります。

  1. 作成した「BlinkingMaterial」を選択します。
  2. インスペクターウィンドウで「Rendering Mode」の項目を見つけます。
  3. デフォルトでは「Opaque(不透明)」になっていますが、これを「Transparent(透明)」に変更します。
  4. 次に、「Albedo」の色をクリックし、右側にあるスライダーで「アルファ値(透明度)」を調整できることを確認してください。

これで、このマテリアルに透明度の設定が適用されました。


2.4 オブジェクトにマテリアルをアタッチする

最後に、作成したマテリアルをオブジェクトにアタッチします。

  1. ヒエラルキーウィンドウで作成した立方体を選択します。
  2. プロジェクトウィンドウの「BlinkingMaterial」を選び、ヒエラルキーウィンドウの立方体にドラッグ&ドロップします。

これで、立方体にマテリアルが適用されました。


ここまでの手順で、透明度を操作できる準備が整いました!次のセクションでは、このマテリアルの透明度をスクリプトで制御し、点滅するように設定していきます。



3. スクリプトを作成して透明度を操作する

ここでは、オブジェクトの透明度を操作して点滅させるスクリプトを作成する方法を解説します。透明度(アルファ値)を変化させて、オブジェクトをフェードイン・フェードアウトさせる仕組みを実装します。

3-1. 新しいスクリプトを作成する

まず、プロジェクトウィンドウで新しいスクリプトを作成しましょう。

  1. プロジェクトウィンドウを右クリック。
  2. 「Create」→「C# Script」を選択します。
  3. スクリプトの名前を「BlinkingObject」と入力します。

これで新しいスクリプトファイルが作成されます。

3-2. 点滅機能を持つスクリプトのコード例

次に、作成したスクリプトをダブルクリックして開き、以下のコードを記述してください。

using UnityEngine;

public class BlinkingObject : MonoBehaviour
{
    // マテリアルを取得するための変数
    private Material material;
    
    // 点滅スピードを設定
    public float blinkSpeed = 1.0f;
    
    // 透明度の変化値
    private float alphaValue = 1.0f;
    private bool isFading = false;

    void Start()
    {
        // オブジェクトのマテリアルを取得
        material = GetComponent<Renderer>().material;
    }

    void Update()
    {
        // 透明度を変更する
        if (isFading)
        {
            alphaValue -= Time.deltaTime * blinkSpeed;
            if (alphaValue <= 0.0f)
            {
                alphaValue = 0.0f;
                isFading = false;
            }
        }
        else
        {
            alphaValue += Time.deltaTime * blinkSpeed;
            if (alphaValue >= 1.0f)
            {
                alphaValue = 1.0f;
                isFading = true;
            }
        }

        // マテリアルの透明度を適用
        Color color = material.color;
        color.a = alphaValue;
        material.color = color;
    }
}

3-3. コードの説明

このスクリプトでは、以下のように透明度を操作してオブジェクトを点滅させています。

  1. マテリアルの取得
    • Start() メソッド内で GetComponent<Renderer>().material を使ってオブジェクトのマテリアルを取得します。
  2. 透明度の計算
    • Update() メソッド内で、alphaValueTime.deltaTime を基に増減させて透明度を計算します。
    • 透明度が 1.0f または 0.0f に達したときに isFading を切り替えてフェードイン・フェードアウトを制御します。
  3. 透明度の反映
    • マテリアルの color.a に計算した alphaValue を適用して透明度を更新します。

3-4. スクリプトの適用

次に、作成したスクリプトをオブジェクトにアタッチします。

  1. ヒエラルキーウィンドウで点滅させたいオブジェクトを選択します。
  2. 「BlinkingObject」スクリプトをドラッグ&ドロップで選択したオブジェクトにアタッチします。

これで、スクリプトの適用は完了です!


このステップで透明度を操作してオブジェクトを点滅させる準備が整いました。次は、実際にテストして点滅動作を確認してみましょう!



4. テストプレイ

ここでは、作成したスクリプトをオブジェクトに適用し、ゲームビューで点滅動作を確認する方法を解説します。簡単な手順なので、安心してください!

1. ゲームビューでテストする

次に、点滅動作が正しく機能するか確認します。

  1. 再生ボタンをクリック
    Unityエディター上部にある再生ボタン(▶)をクリックして、ゲームを再生します。
  2. オブジェクトが点滅しているか確認
    シーンビューまたはゲームビューで、オブジェクトの透明度が変化している(フェードイン・フェードアウトしている)ことを確認してください。

2. 問題がある場合のチェックポイント

もしうまく点滅しない場合は、以下を確認してください。

  • マテリアルの「Rendering Mode」が「Transparent」に設定されているか?
    マテリアルの設定が「Opaque」になっている場合、透明度は適用されません。
  • スクリプトが正しくアタッチされているか?
    オブジェクトのインスペクターに「Blinking Object (Script)」が表示されていることを確認してください。
  • エラーが発生していないか?
    エディター下部の「Console」タブを開き、赤いエラーが出ていないかチェックしてください。

これで、テストは完了です!次は、点滅速度をカスタマイズする方法や、複数のオブジェクトを同時に点滅させる方法に挑戦してみましょう。



5. 応用編

点滅速度を変更する方法

作成したスクリプトでは、blinkSpeed変数が点滅の速さを制御しています。この値を変更することで、点滅のスピードを自由に調整できます。

  1. 点滅速度を変更する手順
    • ヒエラルキーウィンドウからスクリプトをアタッチしたオブジェクトを選択します。
    • インスペクター内の BlinkingObject (Script) コンポーネントを確認します。
    • Blink Speed の値を調整します。たとえば、値を「2」に設定するとスピードが2倍になります。逆に「0.5」に設定するとゆっくり点滅するようになります。
  2. ポイント
    • 数字を大きくするほど、点滅が速くなります。
    • 実際のゲームプレイに合わせて適切な速度を設定してください。

複数のオブジェクトを同時に点滅させる方法

ゲーム内で複数のオブジェクトを同時に点滅させる場合、個別にスクリプトをアタッチする方法もありますが、もっと効率的なやり方があります。

  1. 共通のスクリプトを使う 複数のオブジェクトに同じスクリプトをアタッチするだけで、点滅を共有できます。それぞれのオブジェクトで blinkSpeed を異なる値に設定することで、点滅のスピードにバリエーションを持たせることもできます。
  2. 全オブジェクトを管理するスクリプトを作成 より効率的に管理するには、全てのオブジェクトをリスト化し、スクリプトで一括制御する方法もあります。以下はその例です。
using UnityEngine;
using System.Collections.Generic;

public class BlinkingManager : MonoBehaviour
{
    public List<Renderer> objectsToBlink = new List<Renderer>();
    public float blinkSpeed = 1.0f;

    private float alphaValue = 1.0f;
    private bool isFading = false;

    void Update()
    {
        // 透明度を変更するロジック
        if (isFading)
        {
            alphaValue -= Time.deltaTime * blinkSpeed;
            if (alphaValue <= 0.0f)
            {
                alphaValue = 0.0f;
                isFading = false;
            }
        }
        else
        {
            alphaValue += Time.deltaTime * blinkSpeed;
            if (alphaValue >= 1.0f)
            {
                alphaValue = 1.0f;
                isFading = true;
            }
        }

        // 全てのオブジェクトに透明度を適用
        foreach (Renderer renderer in objectsToBlink)
        {
            Color color = renderer.material.color;
            color.a = alphaValue;
            renderer.material.color = color;
        }
    }
}
  1. このスクリプトの使い方
    • ヒエラルキーウィンドウで空のゲームオブジェクトを作成し、「BlinkingManager」という名前を付けます。
    • 上記のスクリプトを新規作成し、BlinkingManagerオブジェクトにアタッチします。
    • インスペクター内の Objects To Blink リストに、点滅させたいオブジェクトをドラッグ&ドロップします。
  2. 応用の幅 この方法を使用することで、100個以上のオブジェクトでも効率的に点滅を制御できます。例えば、特定のグループだけを点滅させたい場合にも便利です。

これらの応用テクニックを活用することで、点滅効果をより効率的かつ多彩に演出できます。複数オブジェクトの制御は、大規模なシーンや複雑なゲームで特に役立つでしょう!



よくある質問(FAQ)

Q
透明度の操作がうまくいかないときの対処法
A

透明度が変化しない場合、以下のポイントを確認してください:

  • マテリアルの設定: インスペクターでマテリアルの「Rendering Mode」が「Transparent」に設定されていることを確認してください。これが「Opaque」や「Cutout」になっていると透明度が反映されません。
  • スクリプトのアタッチ: 作成したスクリプトがオブジェクトに正しくアタッチされているか確認してください。
  • Rendererコンポーネント: オブジェクトにRendererコンポーネントが含まれているか確認してください。
Q
点滅速度を調整するにはどうすればいいですか?
A

スクリプト内のblinkSpeed変数を変更することで、点滅速度を調整できます。

  • ゆっくり点滅させたい場合: blinkSpeedの値を小さく設定(例: 0.5f)。
  • 速く点滅させたい場合: blinkSpeedの値を大きく設定(例: 2.0f)。 値を変更した後はUnityエディターで再生して確認してみてください。
Q
透明度ではなく色を変化させることはできますか?
A

はい、透明度ではなく色を変化させることも簡単にできます。スクリプト内の以下の部分を変更してください:

// 透明度(アルファ値)を変更するコード
color.a = alphaValue;

// 色を変更するコード例(赤と青を切り替える)
color = Color.Lerp(Color.red, Color.blue, Mathf.PingPong(Time.time * blinkSpeed, 1.0f));

このようにColor.Lerpを使えば、時間経過に応じてスムーズに色を切り替えることができます。

おすすめのアセット

「Real Materials Complete」は、リアルな質感を再現した2Dテクスチャ&マテリアルのセットです。木材、金属、石など、多様な素材の質感を提供し、ゲームやアプリのビジュアルを高めます。軽量でモバイルにも対応しており、ビルトイン、URP、HDRPの各レンダリングパイプラインに互換性があります。初心者でも簡単に扱え、リアルな質感を持つオブジェクトを効率よく作成できます。視覚的にリアルな表現を目指すプロジェクトにおすすめです。