日々是好日~every day is a good day~

日常の中の非日常の備忘録

【Unity】フェードイン・フェードアウトとエフェクト

今回はフェードイン・フェードアウトとエフェクトです
フェードイン・フェードアウトはスクリプトで画像の透明度を操作します
エフェクトはデフォルトで用意されているものを使うので簡単にできます
1.準備した画像をシーン内にドラッグ&ドロップして 位置とサイズを調整

2.もう一つ画像をシーン内にドラッグ&ドロップして 位置とサイズを調整

3.初めは非表示にしておきたい画像のチェックを外す

4.ヒエラルキーの+をクリックし エフェクト/パーティクルシステムを選択

5.オブジェクト名をParticleに変更し インスペクターで設定を変更
今回は赤い印の部分を変更しました
シーン内のパーティクル/再生をクリックするとエフェクトが実際に表示されるのでそれを見ながら好みのエフェクトに設定できます

6.ヒエラルキーの+をクリックし もう一度エフェクト/パーティクルシステムを選択

7.オブジェクト名をEffectに変更し インスペクターで設定を変更

8.ヒエラルキーの+をクリックし 空のオブジェクトを作成を選択

9.オブジェクト名をChangeManagerに変更し プロジェクトタブのScriptを右クリックし 作成/c#スクリプトを選択 ChangeManagerというスクリプトを作成

10.ChangeManagerスクリプトを編集

using System.Collections;
using UnityEngine;

public class ChangeManager : MonoBehaviour
{
    public GameObject particle;
    public GameObject effect;
    public GameObject queen;
    public GameObject girl;
    private float alpha;
    private float red, green, blue;
    // Start is called before the first frame update
    void Start()
    {
        effect.SetActive(false);
        particle.SetActive(false);

        StartCoroutine(FadeOut());
    }

    private IEnumerator FadeOut()
    {
        particle.SetActive(true);
        red = girl.GetComponent<SpriteRenderer>().color.r;
        green = girl.GetComponent<SpriteRenderer>().color.g;
        blue = girl.GetComponent<SpriteRenderer>().color.b;
        alpha = girl.GetComponent<SpriteRenderer>().color.a;
        while (alpha >= 0)
        {
            alpha -= 0.05f;
            girl.GetComponent<SpriteRenderer>().color = new Color(red, green, blue, alpha);
            yield return new WaitForSeconds(0.2f);
        }
        girl.SetActive(false);

        StartCoroutine(FadeIn());
    }
    private IEnumerator FadeIn()
    {
        queen.SetActive(true);
        red = queen.GetComponent<SpriteRenderer>().color.r;
        green = queen.GetComponent<SpriteRenderer>().color.g;
        blue = queen.GetComponent<SpriteRenderer>().color.b;
        alpha = 0;
        queen.GetComponent<SpriteRenderer>().color = new Color(red, green, blue, alpha);
        while (alpha < 1)
        {
            alpha += 0.05f;
            queen.GetComponent<SpriteRenderer>().color = new Color(red, green, blue, alpha);
            yield return new WaitForSeconds(0.3f);
        }
        effect.SetActive(true);
    }
}

11.ChangeManagerスクリプトをChangeManagerオブジェクトにアタッチ

12.ChangeManagerスクリプトにそれぞれのオブジェクトをドラッグ&ドロップ

実行すると女の子がフェードアウトし王女様がフェードインしてきます
エフェクトがあると変身しているように見えませんか(笑)