SnakeControl.cs 2.78 KB
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SnakeControl : MonoBehaviour
{
    private Image img_Snake;
    [SerializeField] private Image img_Rise;
    [Tooltip("走路得播放速度")] public float runPlaySpeed = 10.0f;
    [Tooltip("吃饭团得播放速度")] public float eatPlaySpeed = 10.0f;

    [Tooltip("蛇得走路的图片数组 , 勿动!!!")] [SerializeField]
    private Sprite[] Run_Sprites;

    [Tooltip("蛇的吃东西的图片数组 , 勿动!!!")] [SerializeField]
    private Sprite[] Eat_Sprites;

    /// <summary>
    /// 是否在吃饭团得状态下
    /// </summary>
    private bool IsEat;

    /// <summary>
    /// 当前播放得帧动画携程
    /// </summary>
    private Coroutine curPlayAni;

    /// <summary>
    /// 记录一下 肚子里得饭团得初始位置
    /// </summary>
    /// <returns></returns>
    private Vector3 risePostion;

    // Start is called before the first frame update
    void Start()
    {
        img_Snake = transform.GetComponent<Image>();
        curPlayAni = StartCoroutine(PlayRunAnimation());
        if (img_Rise != null)
        {
            img_Rise.color = new Color(255, 255, 255, 0);
            risePostion = img_Rise.transform.position;
        }
    }

    // Update is called once per frame
    void Update()
    {
    }

    /// <summary>
    /// 吃饭团帧动画播放
    /// </summary>
    public void EatRise()
    {
        if (IsEat)
        {
            return;
        }

        StopCoroutine(curPlayAni);
        curPlayAni = StartCoroutine(PlayEatAnimation());
    }

    public IEnumerator PlayEatAnimation()
    {
        IsEat = true;
        for (int i = 0; i < Eat_Sprites.Length; i++)
        {
            if (img_Snake != null)
            {
                img_Snake.sprite = Eat_Sprites[i];
                yield return new WaitForSeconds(1f / eatPlaySpeed);
            }
        }

        // 吃完之后在切换到走路动画
        curPlayAni = StartCoroutine(PlayRunAnimation());
        IsEat = false;
    }

    IEnumerator PlayRunAnimation()
    {
        while (true)
        {
            // 正向播放
            for (int i = 0; i < Run_Sprites.Length; i++)
            {
                if (img_Snake != null)
                {
                    img_Snake.sprite = Run_Sprites[i];
                    yield return new WaitForSeconds(1f / runPlaySpeed);
                }
            }

            // 反向播放
            for (int i = Run_Sprites.Length - 2; i >= 0; i--)
            {
                if (img_Snake != null)
                {
                    img_Snake.sprite = Run_Sprites[i];
                    yield return new WaitForSeconds(1f / runPlaySpeed);
                }
            }
        }
    }
}