unity3d 如何在Unity中使用精灵列表进行幸运旋转?

f87krz0w  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(86)

所以我基本上是想做一个函数,它接受一个精灵列表,遍历它们,把它们作为精灵渲染器组件的精灵非常快,比如说在第一秒切换30次,这个切换速度在一段时间内变慢,比如说7秒,在这段时间结束时,变化的速度大约是每秒1个精灵,然后函数停止。
我试过使用协程,但它们似乎忽略了每次切换后增加的浮点数的值,并与Yield一起使用返回新的WaitForSeconds。
有没有其他的线索可以实现它?
似乎不能让变化的速度有机地放慢。

aoyhnmkz

aoyhnmkz1#

你应该在for loopyield协程,从你最初的变化率开始,随着我们学习每一个精灵而改变变化率。
这里是代码。

public class SpriteSwitch : MonoBehaviour
{
    public List<Sprite> Sprites;
    public float StartingRateOfChange = 30f;
    
    private SpriteRenderer _spriteRenderer;
    private Coroutine _switchSprites;
    
    private void Start()
    {
        _spriteRenderer = GetComponent<SpriteRenderer>();
        
        if (Sprites != null && Sprites.Count > 0)
            SwitchSprites(Sprites);
    }

    public void SwitchSprites(List<Sprite> sprites)
    {
        if (_switchSprites != null)
            StopCoroutine(_switchSprites);

        _switchSprites = StartCoroutine(StartSpriteSwitching(sprites));
    }

    private IEnumerator StartSpriteSwitching(List<Sprite> sprites)
    {
        var spriteCount = sprites.Count;
        var startSwitchInterval = 1f / StartingRateOfChange;
        var currentSwitchInterval = startSwitchInterval;
        
        // loop through all the sprites
        for (var i = 0; i < spriteCount; i++)
        {
            _spriteRenderer.sprite = sprites[i];
            
            yield return new WaitForSeconds(currentSwitchInterval);

            // changing switch interval by lerping through every sprite
            currentSwitchInterval = i < spriteCount
                ? Mathf.Lerp(startSwitchInterval, 1f, (float)i / spriteCount)
                : 0f;
        }

        _switchSprites = null;
    }
}

相关问题