Unity × DOTween × CanvasGroup でシンプルに実装するフェード付きシーン切り替え
- 1. はじめに
- 2. CanvasGroup を使う理由
- 3. 実装チュートリアル
- 3.1. Step 1. フェード用UIの準備
- 3.2. Step 2. フェード制御スクリプト
- 3.3. ■ フィールド解説
- 3.4. ■ Start():シーン開始時のフェードイン
- 3.5. ■ FadeToScene():フェードアウト → シーン切替
- 3.6. ■ 入力制御(blocksRaycasts)
- 3.7. ■ DOTween の使い方
- 3.8. 1) フェード
- 3.9. 2) コールバック
- 3.10. ■ どういう用途に向くか
- 3.11. ■ 必須前提
- 3.12. ■ まとめ
- 3.13. Step 3. セットアップ
- 3.14. Step 4. ボタンから呼び出す
- 3.15. Titleシーン
- 3.16. Gameシーン
- 4. まとめ
はじめに
シーンを切り替えるときに画面がいきなり切り替わると、プレイヤーに違和感を与えてしまいます。
そこでよく用いられるのが フェードアウト → シーン切り替え → フェードイン の演出です。
今回は、CanvasGroup と DOTween を組み合わせて、最小限のコードでシンプルにフェード付きシーン切り替えを実装する方法を紹介します。
CanvasGroup を使う理由
Image のアルファ値を直接操作する方法でもフェードは可能ですが、CanvasGroup を使うと以下の利点があります。
- alpha を変えるだけでUI全体を一括で透明化できる
- blocksRaycasts を使えば、フェード中のクリックやタップを無効化できる
シーン切り替えには最適な仕組みです。
実装チュートリアル
FadeTestなどの名前でプロジェクトを作成してください
Step 1. フェード用UIの準備
- UI > Canvas を作成
- 子に UI > Image を追加し、画面全体を覆うように設定
- 名前を「FadePanel」とし、色を黒に設定
- 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)
| 値 | 挙動 |
|---|---|
| true | UI が入力を受け止め、下のUIへ通さない → 操作禁止 |
| false | UI を貫通して入力できる → 操作可能 |
つまり
- フェードイン後:操作可(false)
- フェードアウト中:操作不可(true)
という安全な状態管理をしている。
■ DOTween の使い方
1) フェード
fadeCanvasGroup.DOFade(目標Alpha, 時間)
2) コールバック
- .OnStart() → tween 開始時の処理
- .OnComplete() → tween 終了時の処理
フェードタイミングにあわせて入力制御・シーン切替などを行う。
■ どういう用途に向くか
- シーン切り替え時にフラッシュせず自然に見せたい
- ゲームの演出を簡単に入れたい
- ロード時間を隠したい
■ 必須前提
- CanvasGroupを持つ黒い UI を用意UI Image + CanvasGroup
- SceneFader に CanvasGroup をアサイン
■ まとめ
| 項目 | 内容 |
|---|---|
| フェードイン | 画面を黒 → 透明 |
| フェードアウト | 透明 → 黒 |
| 入力制御 | フェード中は操作禁止 |
| DOTween | DOFade とコールバック使用 |
| CanvasGroup | UI の透明度+入力制御 |
視覚的に自然なシーン切替を簡単に実装できるコードです。
特に blocksRaycasts で「フェード中は操作禁止」にしている点が実用的です。
Step 3. セットアップ
- SceneFader を Canvas にアタッチ
- fadeCanvasGroup に FadePanel を割り当てる
- 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 を登録しましょう。
まとめ
- CanvasGroup.alpha を DOTween の DOFade で操作するだけでフェード演出が実装可能
- blocksRaycasts を使えばフェード中の誤操作も防げる
- シンプルながら実用的なシーン切り替え演出が完成
余計な処理を加えず、最小限でフェード付きシーン切り替えを作りたい方におすすめの方法です。










ディスカッション
コメント一覧
まだ、コメントがありません