今回はUnityでDOTween(HOTween v2)を利用して、画像を動かしたりフェードイン・フェードアウトをしてみます。
はじめに
Unityのバージョンは2021.3.14f1です。
ゲームクリア時に出てくる下記の様なものを作成していきます。
DOTweenの追加は下記にて記載しています。
画像アセットの追加
まずはUnityAssetStoreにアクセスして、2DCasualUIHDをマイアセットに追加します。
PackageManagerからDownloadをします。
Download後に全てをimport。
これで準備完了です。
実装開始
ここから実際に作成していきます。簡単にUIを作成した後、スクリプトで実装していきます。
UIの作成
Hierarchyで右クリックして、「UI」→「Image」を追加。
名前をPanelに変更して、幅と高さ、SourceImageを変更して下記の様にします。
Panel配下で「UI」→「Image」を追加
名前をPanelTitleにして位置や幅、高さを変更、SourceImageとColorを変更。下記の様にします。
PanelTitleの配下に「UI」→「Text-TextMeshPro」を追加。
テキストを変更して下記の様にします。
「Panel」の配下に「UI」→「Canvas」を追加。
名前をStarsに変更し、更にその配下に「UI」→「Image」を追加
SourceImageを変更して下記の様に配置。
コピーして3つ、下記の様に配置します。
これでとりあえず簡単なUIの完成。これをDOTweenを利用して動かしてみます。
スクリプトの作成
まずは下記スクリプトを作成。DOTweenを使わず、パネルを有効/無効を切り替えてみます。
using UnityEngine; public class fade : MonoBehaviour { [SerializeField] private GameObject Panel; private void Update() { if (Input.GetKey(KeyCode.Space)) Panel.SetActive(true); if (Input.GetKey(KeyCode.A)) Panel.SetActive(false); } }
パラメータをセット
実行すると下記の様な感じでスペースキーを押すとパネルが有効になります。「パッ」と出てくる感じですね。これをDOTweenを使って動きを付けてみます。
スクリプトを下記に変更。
using UnityEngine; using DG.Tweening; public class fade : MonoBehaviour { [SerializeField] private RectTransform rectTransform; private float fadeTime = 0.6f; private float fadePos = 1000f; private void Update() { if (Input.GetKey(KeyCode.Space)) FadeIn(); if (Input.GetKey(KeyCode.A)) FadeOut(); } private void FadeIn() { rectTransform.transform.localPosition = new Vector3(0f, fadePos, 0f); rectTransform.DOAnchorPos(new Vector2(0f, 0f), fadeTime, false); } private void FadeOut() { rectTransform.transform.localPosition = new Vector3(0f, 0f, 0f); rectTransform.DOAnchorPos(new Vector2(0f, fadePos), fadeTime, false); } }
実行すると下記の様な感じ、上からパネルが出てくる動きになります。
フェードイン・フェードアウト
PanelにCanvasGroupをアタッチ。
スクリプトを下記に変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class fade : MonoBehaviour { [SerializeField] private CanvasGroup canvasGroup; [SerializeField] private float fadeTime; private float fadePos = 1000f; private void Update() { if (Input.GetKey(KeyCode.Space)) FadeIn(); if (Input.GetKey(KeyCode.A)) FadeOut(); } private void FadeIn() { canvasGroup.alpha = 0f; canvasGroup.DOFade(1, fadeTime); } private void FadeOut() { canvasGroup.alpha = 1f; canvasGroup.DOFade(0, fadeTime); } }
パラメータをセットします。
実行すると下記の様な感じに。