UnityUnityメモ

Unityスクリプト入門:オブジェクトを徐々に透明にするテクニック

Unity

1. はじめに

Unityを使ってゲームやアニメーションを作っていると、「オブジェクトをだんだん透明にしたい」という場面がありますよね?この記事では、初心者でも分かりやすいスクリプトを使って、簡単にオブジェクトを透明にする方法を紹介します!

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



2. 準備

オブジェクトを透明化する前に、Unityプロジェクトの中で必要な素材や設定を整えましょう。このセクションでは、3Dオブジェクトやマテリアルを準備する手順を解説します。


必要なもの

  1. Unityエディター(バージョン2020以上推奨)
  2. プロジェクト内で使用する3Dオブジェクト
  3. オブジェクトに適用するマテリアル

1. 3Dオブジェクトを配置

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. 「3D Object」→「Cube」を選択して、シーンにキューブを追加します。
    ポイント:必要に応じてキューブのサイズや位置を調整してください。

2. マテリアルを作成

  1. プロジェクト(Project)ウィンドウで右クリックします。
  2. 「Create」→「Material」を選びます。
  3. 作成されたマテリアルの名前を「FadeMaterial」に変更します。
    名前を変更するには、作成したマテリアルを右クリックして「Rename」を選択してください。

3. マテリアルのプロパティを設定

  1. プロジェクトウィンドウで「FadeMaterial」を選択します。
  2. インスペクター(Inspector)ウィンドウで以下のように設定を変更します:
    • Rendering Mode を「Transparent」に変更します。
    • マテリアルの色(Color)を選び、適当な色(例:白や薄い青)に設定します。 これにより、透明化が正しく反映されるようになります。

4. マテリアルをオブジェクトに適用

  1. ヒエラルキーで先ほど作成したキューブを選択します。
  2. 「FadeMaterial」をキューブにドラッグ&ドロップして適用します。
    適用後、キューブの外観が「FadeMaterial」の色や設定に変わることを確認してください。

以上で、透明化に必要な基本の準備は完了です。次のセクションでは、スクリプトを作成して実際にオブジェクトを透明化する手順を解説します!



3. スクリプト作成

準備が整ったら、次はオブジェクトを徐々に透明にするスクリプトを作成します。このセクションでは、スクリプトの作成から適用までの手順を詳しく解説します。


1. 新しいスクリプトを作成

  1. プロジェクトウィンドウで空白部分を右クリックします。
  2. 「Create」→「C# Script」を選択します。
  3. スクリプトの名前を「FadeOut」と変更します。
    名前を変更するには、スクリプトを右クリックして「Rename」を選択してください。

2. スクリプトにコードを記述

作成したスクリプトをダブルクリックして開き、以下のコードを貼り付けます。

using UnityEngine;

public class FadeOut : MonoBehaviour
{
    public Material objectMaterial; // オブジェクトのマテリアル
    public float fadeDuration = 2.0f; // 透明化にかかる時間(秒)

    private float currentFadeTime;

    void Update()
    {
        if (currentFadeTime < fadeDuration)
        {
            // 現在のAlpha値を計算
            float alphaValue = 1 - (currentFadeTime / fadeDuration);
            // マテリアルの色を更新
            objectMaterial.color = new Color(objectMaterial.color.r, objectMaterial.color.g, objectMaterial.color.b, alphaValue);
            // 時間を更新
            currentFadeTime += Time.deltaTime;
        }
    }
}

このスクリプトの役割は以下の通りです:

  • fadeDuration: 透明化にかかる時間を指定します。
  • objectMaterial.color: マテリアルの色のAlpha値(透明度)を変更します。
  • Time.deltaTime: 時間経過を正確に追跡します。

1. 変数の宣言

public Material objectMaterial; // オブジェクトのマテリアル
public float fadeDuration = 2.0f; // 透明化にかかる時間(秒)
private float currentFadeTime;
  • objectMaterial
    この変数には「透明にしたいオブジェクトのマテリアル(素材)」を入れます。たとえば、色や質感の設定が含まれています。
  • fadeDuration
    透明になるまでにかかる時間を秒単位で設定します。この値を調整することでフェードアウトの速さを変えることができます。
  • currentFadeTime
    現在のフェードの進行時間を記録します。この値を毎フレーム少しずつ増やして透明度を計算します。

2. Updateメソッド

void Update()
{
if (currentFadeTime < fadeDuration)
{
// 現在のAlpha値を計算
float alphaValue = 1 - (currentFadeTime / fadeDuration);
// マテリアルの色を更新
objectMaterial.color = new Color(objectMaterial.color.r, objectMaterial.color.g, objectMaterial.color.b, alphaValue);
// 時間を更新
currentFadeTime += Time.deltaTime;
}
}
  • Update
    Unityの毎フレーム(画面が1回描画されるたびに)呼び出されるメソッドです。フェードアウトの計算をここで行います。
  • if (currentFadeTime < fadeDuration)
    フェードアウトが完了していない場合だけ処理を続けます。currentFadeTimefadeDurationを超えたら処理を止めます。
  • float alphaValue = 1 - (currentFadeTime / fadeDuration);
    「今の透明度(Alpha値)」を計算します。1が完全に不透明で、0が完全に透明です。時間が進むにつれてこの値が小さくなります。
  • objectMaterial.color = new Color(...)
    マテリアルの色を変更します。ここでRGB(赤、緑、青)はそのままにして、透明度(Alpha)だけをalphaValueに変更します。
  • currentFadeTime += Time.deltaTime;
    時間を更新します。Time.deltaTimeは「前のフレームから今のフレームまでにかかった時間」です。これを使うことで、フレームレートに影響されずに正確に時間を計算できます。

全体の流れ

  1. スクリプト開始時の準備
    最初はcurrentFadeTimeが0なので、オブジェクトは完全に不透明(Alphaが1)です。
  2. 毎フレーム透明度を計算
    Updateメソッドが毎フレーム呼び出され、alphaValueがだんだん小さくなっていきます。
  3. 透明度をマテリアルに反映
    マテリアルの色が更新され、オブジェクトが少しずつ透明になります。
  4. フェードアウト完了
    currentFadeTimefadeDuration以上になったら、透明度が完全に0(透明)になり、処理が終了します。

3. スクリプトを適用

  1. ヒエラルキーで、透明化したいオブジェクト(例:キューブ)を選択します。
  2. 作成した「FadeOut」スクリプトをドラッグ&ドロップしてオブジェクトにアタッチします。

4. マテリアルをスクリプトに設定

  1. アタッチしたスクリプトがインスペクター(Inspector)ウィンドウに表示されます。
  2. 「Object Material」のフィールドに「FadeMaterial」をドラッグ&ドロップします。

以上でスクリプトの設定は完了です!次のセクションでは、このスクリプトを動かして透明化の様子を確認する手順を説明します。



4. 実行

スクリプトと設定が完了したら、いよいよ動作確認を行います。このセクションでは、Unityエディターで透明化を実行する手順を解説します。


1. シーンを保存する

まず、作業内容を保存しましょう。

  1. メニューバーから「File」→「Save As」を選択します。
  2. シーンの名前を「FadeScene」として保存します。

2. プレイモードで確認

  1. Unityエディターの上部にある「Play」ボタン(三角アイコン)をクリックしてプレイモードに入ります。
  2. プレイモードが開始すると、キューブが徐々に透明化していくのを確認できます。
    ポイント:透明化が始まるまでに少し時間がかかる場合があります。設定したfadeDurationに応じて変化速度を調整してください。

これで、オブジェクトを透明化する動作確認は完了です!お疲れ様でした。



よくある質問(Q&A)

Q
マテリアルが透明化しません。どうすればいいですか?
A

マテリアルの「Rendering Mode」を「Transparent」に変更してください。

Q
透明になった後、消えるようにする方法は?
A

Destroy(gameObject) を追加してオブジェクトを削除できます。

Q
他のオブジェクトにも使えますか?
A

はい!同じスクリプトを使用できます。適切なマテリアルを設定してください。

おすすめのアセット

「Fade Effects」は、Unityのゲーム開発で使える便利なアセットです。このアセットを使うと、オブジェクトのフェードインやフェードアウトのエフェクトを簡単に実装できます。特に、キャラクターやアイテムが消える・現れるときの演出に役立ちます。

特徴としては、複雑なコードを書く必要がない点があります。アセットには使いやすいスクリプトとシェーダーが含まれており、設定も直感的に行えます。また、フェードの速度や透明度を自由に調整できるので、さまざまなシーンに合わせた演出が可能です。