public void SetSprite(string name)
    {
        SpriteRect rect          = _spriteInfo.GetSprite(name);
        Vector2    imgDimensions = new Vector2(_spriteTexture.width, _spriteTexture.height);

        renderer.material.mainTextureOffset = rect.GetOffset(imgDimensions);
        renderer.material.mainTextureScale  = rect.GetScale(imgDimensions);
    }
    private IEnumerator Once()
    {
        string[] spriteNames = _spriteInfo.GetSpriteNames();
        renderer.material.mainTexture = _spriteTexture;
        _isPlaying = true;

        for (int i = 0; i < spriteNames.Length; i++)
        {
            SpriteRect rect            = _spriteInfo.GetSprite(spriteNames[i]);
            Vector2    imageDimensions = new Vector2(_spriteTexture.width, _spriteTexture.height);
            renderer.material.mainTextureOffset = rect.GetOffset(imageDimensions);
            renderer.material.mainTextureScale  = rect.GetScale(imageDimensions);
            yield return(new WaitForSeconds(_interval));
        }

        Stop();
    }
    private IEnumerator PingPong()
    {
        string[] spriteNames = _spriteInfo.GetSpriteNames();
        renderer.material.mainTexture = _spriteTexture;
        _isPlaying = true;

        while (true)
        {
            for (int i = -(spriteNames.Length - 1); i < spriteNames.Length - 1; i++)
            {
                SpriteRect rect            = _spriteInfo.GetSprite(spriteNames[Mathf.Abs(i)]);
                Vector2    imageDimensions = new Vector2(_spriteTexture.width, _spriteTexture.height);
                renderer.material.mainTextureOffset = rect.GetOffset(imageDimensions);
                renderer.material.mainTextureScale  = rect.GetScale(imageDimensions);
                yield return(new WaitForSeconds(_interval));
            }
        }
    }
    // Corotina para a execução do sprite no modo Loop
    // Os outros modos de execução possuem corotinas muito semelhantes entre si, por isso só essa será detalhada
    private IEnumerator Loop()
    {
        //Busca a lista de nomes no atlas, seta a textura do material e habilita a opção '_isPlaying'
        string[] spriteNames = _spriteInfo.GetSpriteNames();
        renderer.material.mainTexture = _spriteTexture;
        _isPlaying = true;

        while (true)                                                                                   // Loop infinito
        {
            for (int i = 0; i < spriteNames.Length; i++)                                               //Para cada sprite no sprite sheet (por ordem)
            {
                SpriteRect rect            = _spriteInfo.GetSprite(spriteNames[i]);                    // Pega o retângulo equivalente
                Vector2    imageDimensions = new Vector2(_spriteTexture.width, _spriteTexture.height); // Armazena a dimensões do atlas
                renderer.material.mainTextureOffset = rect.GetOffset(imageDimensions);                 // Seta o offset do material, de acordo com o retângulo atual
                renderer.material.mainTextureScale  = rect.GetScale(imageDimensions);                  // Seta a escala do material, de acordo com o retângulo atual
                yield return(new WaitForSeconds(_interval));                                           // Delay entre frames
            }
        }
    }