【Unity】【DoozyUI】ボタン位置を初期化するメモ

はじめに

最近AssetStoreから削除され、オープンソースへの移行が発表されたDoozyUI。
個人的にAnimationがプリセットされたボタンが便利で使っていたのですが、そのボタンを使用する際の注意点メモ。

問題点

ボタンをゲーム再生中にスクリプト等から移動した後でボタンにカーソルが触れると、移動前の位置に戻ってしまう。

実際ボタンは関係なくUISelectableUIAnimatorがアタッチされているオブジェクトで発生します。

原因

DoozyUIのボタンアセットにはUIAnimationがデフォルトでアタッチされており、PressやHighlight等の状態変更が発生するとAnimationが再生されるようになっている。

この、Animationに位置更新も含まれるため、Moveアニメーションを設定していなくても位置が初期位置に飛ぶことが発生する。
※UISelectableUIAnimatorでは初期化処理として位置を記録し、(設定によっては)それをベースに各種Animation再生を行うため

対応

Buttonにアタッチするコンポーネントを下記のようにしておき、位置更新後にUpdateStartPositionを呼ぶとその位置で改めて初期化されるため、カーソルに触れても位置更新が発生しなくなる。

public class SampleButton : MonoBehaviour
{
    private UISelectableUIAnimator _animator;

    private void Awake()
    {
        // UIAnimatorの代わりにUISelectableUIAnimatorを取得
        _animator = GetComponent<UISelectableUIAnimator>();
    }

    /// <summary>
    /// アニメーターの初期位置を更新します
    /// </summary>
    public void UpdateStartPosition()
    {
        _animator?.UpdateStartPosition();
    }
}

さいごに

いつにも増してニッチな内容でしたが以上となります。

最後までお読みいただき、ありがとうございます。

コメント

タイトルとURLをコピーしました