ゲームソリューション部の えがわ です。
ゲームだとUIをパッよりもシュッと表示させたいですよね。
今回は簡単な方法でパネルをシュッとさせてみました。
開発環境
- Unity 2023.1.16f1
- DOTween 1.2.745
- UniTask 2.4.1
完成形
事前準備
DOTweenのインストール
Window -> Asset Store
から入手し、Pakage Manager
からインストールしておきます。
UniTaskのインストール
こちらから入手可能です。
unitypackageでもgit URLでも好きな方法でインストールできます。
DOTweenでUniTaskを使用するため以下の設定も行っておきます
File -> BuildSettings -> Player -> Script Compilation
にUNITASK_DOTWEEN_SUPPORT
を追加
これで準備は整いました。
実装開始
UIの作成
まずシュッと動かしたいパネルを作成します。
大きさを適当な値に設定しCanvasの右側に寄り添うように配置します。
また、パネルの中に何かしらのUIを作成してみましょう。
今回はボタンを追加します。
次にAnchor Presets
を画像の通りにして、Pivot
のXを1にします。
この設定でPosXが0の時が表示させたい位置となります。
ここまで設定を行えたら、パネルをCanvasよりも外側に移動します。
配置した場所からキャンバス内にシュッとスライドさせます。
シュッさせる処理を作成
パネルのInspecter
からAdd Component
を選択してNew script
を選択します。
名前にはUISlidePanelとでもしておきましょう。
作成したスクリプトに以下をペーストします。
using UnityEngine;
using Cysharp.Threading.Tasks;
using DG.Tweening;
public class UISlidePanel : MonoBehaviour
{
private Vector3 initPosition;
private CanvasGroup canvasGroup;
private RectTransform rect => this.gameObject.transform as RectTransform;
private void Awake()
{
initPosition = rect.position;
canvasGroup = GetComponent<CanvasGroup>();
}
public async void Show()
{
canvasGroup.alpha = 0f;
var fade = canvasGroup.DOFade(1f, 0.2f);
var move = rect.DOAnchorPosX(0f, 0.2f);
await UniTask.WhenAll(
fade.ToUniTask(),
move.ToUniTask()
);
Debug.Log("Showed");
}
public async void Hide()
{
var fade = canvasGroup.DOFade(0f, 0.2f);
var move = rect.DOAnchorPosX(initPosition.x, 0.2f).SetEase(Ease.InCubic);
await UniTask.WhenAll(
fade.ToUniTask(),
move.ToUniTask()
);
Debug.Log("Hid");
}
}
UIにボタンを二つ作成し、ShowとHideをそれぞれOnClickに設定します。
最後に
今回は複雑な設定はしていませんが、EASE等を設定させるともっとリッチなUIになります。
ですが、ゲーム種類によっては変に凝る必要もなく、パッと表示させたほうがユーザー体験が向上する場合もあります。
Tweenを使ってUIを動かすのは楽しいですが、自己満足にならないようにですね。
うーん、UI/UXは奥が深い