LoginSignup
23
11

More than 5 years have passed since last update.

[Unity] DOTweenで自動再生させない

Last updated at Posted at 2017-01-16

実行環境

  • 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

23
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
11