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

## 実行環境
- Unity5.6.0b1 (beta)
- DOTween v1.1.310

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

### 例: ボタンを押したらメニューが表示される
```c#: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](https://qiita-image-store.s3.amazonaws.com/0/102664/2194929e-4a14-c2bc-156e-0c98523d863b.gif)

## defaultAutoPlay
- [ドキュメント](http://dotween.demigiant.com/documentation.php#options)
- [リファレンス(defaultAutoPlay)](http://dotween.demigiant.com/api/class_d_g_1_1_tweening_1_1_d_o_tween.html#ad2eeac893afa6141107f3ca029dcc66a)
- [リファレンス(AutoPlay)](http://dotween.demigiant.com/api/namespace_d_g_1_1_tweening.html#a9865614210e097d525c1d5f84d41338d)
- `DOTween.defaultAutoPlay` の値によって自動再生の有無が制御出来る
  - デフォルトで `AutoPlay.All ` が設定されている
  - これによりTween/Sequence が生成された直後に再生される

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

## defaultAutoPlayを変更する
### DOTween.Init() 実行後に変更する必要がある
- 以下のコードを実行時に、ボタンを押していないのに再生されてしまう
- これは `DOTween.Init()` を明示的に宣言していないことによる罠である
  - Init が未実行な場合、Tween/Sequence生成時に Init が暗黙的に実行される (認識)
  - Init 実行前の設定の変更は反映されない
  - 参考: Initの各種引数に関しては [[Unity] DOTweenを使ってUI要素を点滅させる](http://qiita.com/lycoris102/items/fe148d2c6803742c6f4d#dotweeninit%E3%81%AE%E5%BC%95%E6%95%B0) に記載

```c#: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());
	}
}
```

### 修正例
```c#: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](https://qiita-image-store.s3.amazonaws.com/0/102664/c58daf68-4879-2ccc-6a98-8ebd5d11ed41.gif)