More than 1 year has passed since last update.

実行環境

  • Unity5.6.0b1 (beta)
  • DOTween v1.1.310

DOTweenの自動再生について

  • DOTweenにおけるTween/Sequenceは明示的に Play() を呼び出さなくても実行されるような標準設定となっている
  • そのため、ボタン押下や任意のメソッド呼び出し時に再生したいケースで困る

例: ボタンを押したらメニューが表示される

OpenMenuButton
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

[RequireComponent(typeof(Button))]
public class OpenMenuButton : MonoBehaviour
{
    public Image BackGroundImage;
    public CanvasGroup MenuCanvasGroup;

    void Start ()
    {
        BackGroundImage.enabled = false;
        MenuCanvasGroup.gameObject.SetActive(false);

        Sequence sequence = DOTween.Sequence()
            .OnStart(() =>
            {
                MenuCanvasGroup.gameObject.SetActive(true);
                MenuCanvasGroup.alpha = 0.0f;

                BackGroundImage.enabled = true;
                BackGroundImage.color = new Color(
                    BackGroundImage.color.r,
                    BackGroundImage.color.g,
                    BackGroundImage.color.b,
                    0.0f
                );
            })
            .Append(MenuCanvasGroup.DOFade(1.0f, 2.0f))
            .Join(BackGroundImage.DOFade(0.3f, 2.0f));

        GetComponent<Button>().onClick.AddListener(() => sequence.Play());
    }
}
  • 上記をアタッチした状態で実行すると右下のボタンを押す前にSequenceが再生されてしまうことが分かる

play_open_menu_1.gif

defaultAutoPlay

AutoPlay
AutoPlay.All 全てのTween/Sequenceは自動再生される
AutoPlay.AutoPlaySequences Sequenceは自動再生され、Tweenは自動再生されない
AutoPlay.AutoPlayTweeners Tweenは自動再生され、Sequenceは自動再生されない
AutoPlay.None 全てのTween/Sequenceは自動再生されない

defaultAutoPlayを変更する

DOTween.Init() 実行後に変更する必要がある

  • 以下のコードを実行時に、ボタンを押していないのに再生されてしまう
  • これは DOTween.Init() を明示的に宣言していないことによる罠である
OpenMenuButton
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

[RequireComponent(typeof(Button))]
public class OpenMenuButton : MonoBehaviour
{
    public Image BackGroundImage;
    public CanvasGroup MenuCanvasGroup;

    void Start ()
    {
        BackGroundImage.enabled = false;
        MenuCanvasGroup.gameObject.SetActive(false);

        // 自動再生させない
        DOTween.defaultAutoPlay = AutoPlay.None;

        Sequence sequence = DOTween.Sequence()
            .OnStart(() =>
            {
                MenuCanvasGroup.gameObject.SetActive(true);
                MenuCanvasGroup.alpha = 0.0f;

                BackGroundImage.enabled = true;
                BackGroundImage.color = new Color(
                    BackGroundImage.color.r,
                    BackGroundImage.color.g,
                    BackGroundImage.color.b,
                    0.0f
                );
            })
            .Append(MenuCanvasGroup.DOFade(1.0f, 2.0f))
            .Join(BackGroundImage.DOFade(0.3f, 2.0f));

        GetComponent<Button>().onClick.AddListener(() => sequence.Play());
    }
}

修正例

OpenMenuButton
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

[RequireComponent(typeof(Button))]
public class OpenMenuButton : MonoBehaviour
{
    public Image BackGroundImage;
    public CanvasGroup MenuCanvasGroup;

    // DOTWeenInitializer的なスクリプトに移植してゲーム開始時に呼び出すと良い
    void Awake()
    {
        DOTween.Init();
        DOTween.defaultAutoPlay = AutoPlay.None;
    }

    void Start ()
    {
        BackGroundImage.enabled = false;
        MenuCanvasGroup.gameObject.SetActive(false);

        Sequence sequence = DOTween.Sequence()
            .OnStart(() =>
            {
                MenuCanvasGroup.gameObject.SetActive(true);
                MenuCanvasGroup.alpha = 0.0f;

                BackGroundImage.enabled = true;
                BackGroundImage.color = new Color(
                    BackGroundImage.color.r,
                    BackGroundImage.color.g,
                    BackGroundImage.color.b,
                    0.0f
                );
            })
            .Append(MenuCanvasGroup.DOFade(1.0f, 2.0f))
            .Join(BackGroundImage.DOFade(0.3f, 2.0f));

        GetComponent<Button>().onClick.AddListener(() => sequence.Play());
    }
}
  • 上記コードにて右下のボタンを押すまで実行されなくなった

play_open_menu_2.gif

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.