オバケは 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 ();
}