FC2ブログ
    08 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 10

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】シーンの遷移をリッチにしよう!シーン遷移のトランジションについて。 

    こんにちは。
    ハルシオンの坂内っす。
    おくさん!もう今週で10月になっちゃうそうですよ!
    今年もあと3か月しかない!!


    さて、Unityのお話。

    シーン遷移の際のトランジションについて。
    こうやってるよっていう話をしたいと思います。

    以前にトランジションのフェードについては書いてます。
    【ハルシオンブログ】UnityのuGUIでトランジション 画面遷移とかを少しリッチに!

    上記記事はトランジションというかImageをマスクで綺麗にフェードするための方法なので、今日の記事と混ぜることでいい感じのトランジションができるんじゃないかなと思います。


    画面遷移のタイミングで画面に遷移エフェクトを行い、シーンを移動するといったことをしようと思った際、シーンにエフェクトをつけてしまうとシーンが切り替わった時点でエフェクトが消えてしまいます。
    そのため、シーンとは別にトランジション用のプレハブを作成し、シーンA⇒シーンBといった遷移の際にはトランジションオブジェクトは常に居続ける感じにしています。

    まずはトランジションのプレハブを作成



    [TransitionManager.cs]

    using DG.Tweening;
    using System;
    using System.Collections;
    using UnityEngine;
    using UnityEngine.UI;

    public class TransitionManager : MonoBehaviour
    {
    public static TransitionManager instance;

    private void Awake() {
    if (instance == null) {
    instance = this;
    DontDestroyOnLoad(gameObject);
    } else {
    Destroy(gameObject);
    }
    }

    [SerializeField] Image imgTransition;
    float fadeTime = 0.8f;

    public IEnumerator FadeIn() {
    imgTransition.DOFade(0f, fadeTime);
    yield return new WaitForSeconds(fadeTime);
    }

    public IEnumerator FadeOut() {
    imgTransition.DOFade(1f, fadeTime);
    yield return new WaitForSeconds(fadeTime);
    }
    }



    シングルトンのトランジションマネージャーを作成。
    フェードインとフェードアウトはまずは作っておきます。

    シーンを2個作ります。





    シーンのコードはこんな感じ。
    ボタンを押したらシーン1の場合はシーン2へ遷移。
    シーン2の場合はシーン1へ遷移。

    [Scene1.cs]
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.UI;

    public class Scene1 : MonoBehaviour
    {
    [SerializeField] TransitionManager transitonObj;
    [SerializeField] Button btnNext;
    IEnumerator Start() {
    Instantiate(transitonObj);
    yield return null;
    yield return StartCoroutine(TransitionManager.instance.FadeIn());
    btnNext.onClick.AddListener(() => StartCoroutine(ChangeScene()));
    }

    IEnumerator ChangeScene() {
    yield return StartCoroutine(TransitionManager.instance.FadeOut());
    SceneManager.LoadSceneAsync("scene2");
    SceneManager.UnloadSceneAsync("scene1");
    }
    }



    [Scene2.cs]

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.UI;

    public class Scene2 : MonoBehaviour
    {
    [SerializeField] Button btnNext;
    IEnumerator Start()
    {
    yield return StartCoroutine(TransitionManager.instance.FadeIn());
    btnNext.onClick.AddListener(() => StartCoroutine(ChangeScene()));
    }

    IEnumerator ChangeScene() {
    yield return StartCoroutine(TransitionManager.instance.FadeOut());
    SceneManager.LoadSceneAsync("scene1");
    SceneManager.UnloadSceneAsync("scene2");
    }
    }



    ただこれだけです。


    これで、シーン1⇔シーン2の遷移の際に、トランジションを行いながら遷移することができます。



    もちろん実際に使う際にはダブルクリックの対応とかはやらないといけませんが。

    たったこれだけのコードでシーン遷移のトランジションを行うことができます。

    ということで、シーン遷移時のトランジションについてでした。

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/921-4cd3e2be
    この記事にトラックバックする(FC2ブログユーザー)