negitamago
2/3/2019 - 3:39 AM

上下移動と回転を繰り返すコイン

上下移動と回転を繰り返すコイン

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;  // DOTween dotween.demigiant.com

/// <summary>
/// 上下移動と回転を繰り返すコイン
/// </summary>
public class CoinFloatingAnimation : MonoBehaviour
{
    [SerializeField] float moveValue = 0.5f;
    [SerializeField] float duration = 1f;
    [SerializeField] Ease ease = Ease.InOutSine;

    [SerializeField] List<Sprite> sprites = default;
    [SerializeField] float spriteChangeSpan = 0.2f;

    private void Start ()
    {
        MoveTweening ();

        StartCoroutine ( SpriteAnimation () );
    }

    // 上下移動はDOTween使用
    private void MoveTweening ()
    {
        var tweenParams = new TweenParams().SetEase(ease).SetRelative();

        var sequence = DOTween.Sequence();
        sequence.Append ( transform.DOMoveY ( moveValue, duration ).SetAs ( tweenParams ) );
        sequence.Append ( transform.DOMoveY ( -moveValue, duration ).SetAs ( tweenParams ) );
        sequence.SetLoops ( -1 );
    }

    // 回転はSpriteをコルーチンで切り替える
    private IEnumerator SpriteAnimation ()
    {
        var _renderer = GetComponent<SpriteRenderer> ();

        while ( _renderer != null )
        {
            for ( int i = 0 ; i < sprites.Count ; i++ )
            {
                _renderer.sprite = sprites[i];
                yield return new WaitForSeconds ( spriteChangeSpan );
            }
        }
    }
}