DOTweenを活用したゲームオーバーテキストアニメーション資料

本資料では、Unityにおけるゲームオーバー表示の演出として、DOTweenライブラリを利用したアニメーション実装例「GameOverTextAnimator」について解説します。DOTweenの基本的な使い方、各アニメーションの処理内容、シーン遷移処理について理解することが目的です。


概要

本スクリプトは、ゲームオーバー時に以下の演出を実装します。

  • オブジェクト(ここではゲームオーバーテキスト)を画面上部から本来の位置に移動するアニメーションを実行。
  • 移動完了後、シェイク(振動)によるインパクトを与える演出を実施。
  • 指定した待機時間後に、タイトルシーンへ自動遷移させる処理を実装。

DOTweenの便利な機能(Tween作成や遅延処理)を活用し、シンプルなコードで効果的な演出を実現しています。


コード全体の説明

以下が「GameOverTextAnimator」スクリプトの全体コードです。

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

public class GameOverTextAnimator : MonoBehaviour
{
    private void Start()
    {
        var transformCache = transform;
        // 終点として使用するため、初期座標を保持
        var defaultPosition = transformCache.localPosition;
        // いったん上の方に移動させる
        transformCache.localPosition = new Vector3(0, 300f);
        // 移動アニメーション開始
        transformCache.DOLocalMove(defaultPosition, 1f)
            .SetEase(Ease.Linear)
            .OnComplete(() =>
            {
                Debug.Log("GAME OVER!!");
                // シェイクアニメーション
                transformCache.DOShakePosition(1.5f, 100);
            });

        // DOTweenには、Coroutineを使わずに任意の秒数を待てる便利メソッドも搭載されている
        DOVirtual.DelayedCall(10, () =>
        {
            // 10秒待ってからタイトルシーンに遷移
            SceneManager.LoadScene("TitleScene");
        });
    }
}

各処理の詳細解説

名前空間のインポート

  • using DG.Tweening;
    DOTweenライブラリの機能(アニメーション作成、トゥイーン操作など)を使用するために必要です。
  • using UnityEngine;
    Unityの基本機能(オブジェクト操作、デバッグログなど)を提供します。
  • using UnityEngine.SceneManagement;
    シーンのロードや切り替えを管理する機能が含まれており、ここではシーン遷移処理に使用しています。

初期設定と位置調整

var transformCache = transform;
var defaultPosition = transformCache.localPosition;
transformCache.localPosition = new Vector3(0, 300f);
  • Transformのキャッシュ
    transformプロパティの参照をキャッシュすることで、処理速度の向上とコードの可読性を高めています。
  • defaultPositionの保存
    現在のローカル座標を保存し、後でアニメーションの終着点として利用します。
  • 初期位置の変更
    オブジェクトを一旦 (0, 300f) に移動させ、画面上部(またはシーン内で上方向)に配置します。これにより、後で下方向への移動を視覚的に分かりやすく実現します。

移動アニメーションとシェイクエフェクト

transformCache.DOLocalMove(defaultPosition, 1f)
    .SetEase(Ease.Linear)
    .OnComplete(() =>
    {
        Debug.Log("GAME OVER!!");
        transformCache.DOShakePosition(1.5f, 100);
    });
  • DOLocalMove
    オブジェクトのローカル位置を、defaultPosition(保存しておいた元の位置)に1秒間かけて移動させます。
  • SetEase(Ease.Linear)
    アニメーションの速度を線形(一定)に設定することで、開始から終了まで均一な動作を実現します。
  • OnCompleteのコールバック
    移動アニメーションが終了した際に以下の処理を実行:
    • Debug.Log("GAME OVER!!");
      コンソールに「GAME OVER!!」と表示し、処理完了のログ確認ができます。
    • DOShakePosition(1.5f, 100);
      指定された1.5秒間、位置をランダムに揺らすシェイク効果を適用。第二引数の100はシェイクの強度を示しており、視覚的インパクトを強調します。

シーン遷移の処理

DOVirtual.DelayedCall(10, () =>
{
    SceneManager.LoadScene("TitleScene");
});
  • DOVirtual.DelayedCall
    DOTweenが提供するメソッドで、指定秒数(ここでは10秒)待機した後に、指定されたラムダ式内の処理を実行します。これにより、コルーチンを使わずに非同期処理が可能です。
  • シーン切替処理
    10秒経過後、SceneManager.LoadScene("TitleScene"); によりタイトルシーン(シーン名:"TitleScene")へ自動で遷移します。

全体の流れ

  1. 初期設定と配置
    • オブジェクトの現在位置(defaultPosition)を保存後、画面上部の (0, 300f) に移動させる。
  2. 移動アニメーションの実行
    • 保存した初期位置へ1秒間で滑らかに移動する。
    • 移動完了後、コンソールに「GAME OVER!!」を出力し、1.5秒間のシェイクアニメーションを実施。
  3. シーン遷移
    • DOTweenの遅延処理を利用し、10秒後にタイトルシーンへ自動で切り替える。

まとめ

本資料で紹介した「GameOverTextAnimator」スクリプトは、DOTweenライブラリを利用して簡潔かつ視覚的なゲームオーバー演出を実装しています。

  • アニメーションの活用:
    初期位置から本来の位置への移動、シェイクエフェクトにより動的な演出が可能です。
  • 非同期処理:
    DOTweenのDOVirtual.DelayedCallを用いたシーン遷移処理で、コルーチンを使わずシンプルなコードで実装できています。

この実装例を基に、より複雑なアニメーションやエフェクトを追加することで、ゲーム全体の演出をさらに向上させることが期待できます。ぜひ、プロジェクト内で実際に試しながら、DOTweenの機能を活用してみてください。

TWeen,Unity

Posted by hidepon