negitamago
2/20/2019 - 1:46 PM

オバケは DOTween.Sequence で不透明度変更を繰り返す。倒されたら Sequence を止める

オバケは DOTween.Sequence で不透明度変更を繰り返す。倒されたら Sequence を止める

using UnityEngine;
using DG.Tweening;
using System.Linq;

/// <summary>
/// オバケは DOTween.Sequence で不透明度変更を繰り返す。倒されたら Sequence を止める
/// </summary>
public class EnemyObakeFade : MonoBehaviour, IEnemyBeaten
{
    [SerializeField] float minAlpha = 0.2f;
    [SerializeField] float maxAlpha = 0.7f;
    [SerializeField] float fadeDuration = 1f;
    [SerializeField] float appearanceDuration = 3f;

    private Sequence sequence;

    private void Start ()
    {
        var renderer = GetComponent<SpriteRenderer>();
        var colliders = GetComponents<Collider2D>();

        sequence = DOTween.Sequence ()
            .Append ( renderer.DOFade ( minAlpha, fadeDuration ) ).SetEase ( Ease.InOutSine )
            .AppendCallback ( () => ColliderEnabler ( colliders, false ) )
            .AppendInterval ( appearanceDuration )
            .Append ( renderer.DOFade ( maxAlpha, fadeDuration ) ).SetEase ( Ease.InOutSine )
            .AppendCallback ( () => ColliderEnabler ( colliders, true ) )
            .AppendInterval ( appearanceDuration )
            .SetLoops ( -1 );
    }

    private void ColliderEnabler ( Collider2D[] colliders, bool b )
    {
        foreach ( var collider in colliders ) collider.enabled = b;
    }

    void IEnemyBeaten.OnBeaten () => sequence.Kill ();
}