Unity × DOTween × CanvasGroup でシンプルに実装するフェード付きシーン切り替え

2025年11月5日

はじめに

シーンを切り替えるときに画面がいきなり切り替わると、プレイヤーに違和感を与えてしまいます。

そこでよく用いられるのが フェードアウト → シーン切り替え → フェードイン の演出です。

今回は、CanvasGroup と DOTween を組み合わせて、最小限のコードでシンプルにフェード付きシーン切り替えを実装する方法を紹介します。


CanvasGroup を使う理由

Image のアルファ値を直接操作する方法でもフェードは可能ですが、CanvasGroup を使うと以下の利点があります。

  • alpha を変えるだけでUI全体を一括で透明化できる
  • blocksRaycasts を使えば、フェード中のクリックやタップを無効化できる

シーン切り替えには最適な仕組みです。


実装チュートリアル

FadeTestなどの名前でプロジェクトを作成してください

Step 1. フェード用UIの準備

  1. UI > Canvas を作成
  2. 子に UI > Image を追加し、画面全体を覆うように設定
  3. 名前を「FadePanel」とし、色を黒に設定
  4. CanvasGroup コンポーネント を追加
    • alpha = 1(最初は黒画面)
    • interactable = true
    • blocksRaycasts = true

Step 2. フェード制御スクリプト

using UnityEngine;
using UnityEngine.SceneManagement;
using DG.Tweening;

public class SceneFader : MonoBehaviour
{
    [SerializeField] private CanvasGroup fadeCanvasGroup;
    [SerializeField] private float fadeDuration = 1.0f;

    private void Start()
    {
        // シーン開始時はフェードイン
        fadeCanvasGroup.alpha = 1;
        fadeCanvasGroup.DOFade(0, fadeDuration)
            .OnComplete(() =>
            {
                fadeCanvasGroup.blocksRaycasts = false; // 入力有効化
            });
    }

    public void FadeToScene(string sceneName)
    {
        // フェードアウト後にシーンをロード
        fadeCanvasGroup.DOFade(1, fadeDuration)
            .OnStart(() =>
            {
                fadeCanvasGroup.blocksRaycasts = true;  // 入力無効化
            })
            .OnComplete(() =>
            {
                SceneManager.LoadScene(sceneName);
            });
    }
}

Unity の CanvasGroup と DOTween を使ってシーン遷移時にフェード演出(黒フェード)を行うためのクラスです。

  • シーン開始時:黒 → 透明(フェードイン)
  • ボタンなどで呼び出し:透明 → 黒 → LoadScene(フェードアウト)

ゲームやアプリでよく使う、スムーズなシーン切り替え演出を簡単に実装できます。


■ フィールド解説

[SerializeField] private CanvasGroup fadeCanvasGroup;
  • 画面を覆う黒パネル(UI)を管理
  • alpha を操作して画面の透明度を変更
[SerializeField] private float fadeDuration = 1.0f;
  • フェードにかかる時間(秒)

■ Start():シーン開始時のフェードイン

fadeCanvasGroup.alpha = 1;
  • 画面を黒で覆う(= 完全に隠す)
fadeCanvasGroup.DOFade(0, fadeDuration)
  • DOTween によるフェードアニメーション
  • alpha: 1 → 0→ 黒 → 透明(シーンが見える)
.OnComplete(() => fadeCanvasGroup.blocksRaycasts = false);
  • フェードイン完了後、 黒UIが クリックをブロックしないようにする
  • → プレイヤー操作が可能になる

■ FadeToScene():フェードアウト → シーン切替

fadeCanvasGroup.DOFade(1, fadeDuration)
  • alpha: 0 → 1→ 透明 → 黒(画面を隠す)
.OnStart(() => fadeCanvasGroup.blocksRaycasts = true);
  • フェード開始と同時に 入力不可(ボタン多重押し防止)
.OnComplete(() => SceneManager.LoadScene(sceneName));
  • フェードアウト完了後に新しいシーンをロード

■ 入力制御(blocksRaycasts)

挙動
trueUI が入力を受け止め、下のUIへ通さない → 操作禁止
falseUI を貫通して入力できる → 操作可能

つまり

  • フェードイン後:操作可(false)
  • フェードアウト中:操作不可(true)

という安全な状態管理をしている。


■ DOTween の使い方

1) フェード

fadeCanvasGroup.DOFade(目標Alpha, 時間)

2) コールバック

  • .OnStart() → tween 開始時の処理
  • .OnComplete() → tween 終了時の処理

フェードタイミングにあわせて入力制御・シーン切替などを行う。


■ どういう用途に向くか

  • シーン切り替え時にフラッシュせず自然に見せたい
  • ゲームの演出を簡単に入れたい
  • ロード時間を隠したい

■ 必須前提

  • CanvasGroupを持つ黒い UI を用意UI Image + CanvasGroup
  • SceneFader に CanvasGroup をアサイン

■ まとめ

項目内容
フェードイン画面を黒 → 透明
フェードアウト透明 → 黒
入力制御フェード中は操作禁止
DOTweenDOFade とコールバック使用
CanvasGroupUI の透明度+入力制御

視覚的に自然なシーン切替を簡単に実装できるコードです。

特に blocksRaycasts で「フェード中は操作禁止」にしている点が実用的です。


Step 3. セットアップ

  1. SceneFader を Canvas にアタッチ
  2. fadeCanvasGroup に FadePanel を割り当てる
  3. fadeDuration にフェード時間を指定(例:1秒)

Step 4. ボタンから呼び出す

using UnityEngine;

public class TitleMenu : MonoBehaviour
{
    public void OnClickStart()
    {
        var sceneFader = FindFirstObjectByType<SceneFader>();

        if (sceneFader != null)
        {
            sceneFader.FadeToScene("GameScene");
        }
    }
}

Unity の Button コンポーネントの OnClick() に OnClickStart を登録しましょう。


Titleシーン

Gameシーン

まとめ

  • CanvasGroup.alpha を DOTween の DOFade で操作するだけでフェード演出が実装可能
  • blocksRaycasts を使えばフェード中の誤操作も防げる
  • シンプルながら実用的なシーン切り替え演出が完成

余計な処理を加えず、最小限でフェード付きシーン切り替えを作りたい方におすすめの方法です。

訪問数 59 回, 今日の訪問数 1回

TWeen,UI,Unity

Posted by hidepon