所以我基本上是想做一个函数,它接受一个精灵列表,遍历它们,把它们作为精灵渲染器组件的精灵非常快,比如说在第一秒切换30次,这个切换速度在一段时间内变慢,比如说7秒,在这段时间结束时,变化的速度大约是每秒1个精灵,然后函数停止。我试过使用协程,但它们似乎忽略了每次切换后增加的浮点数的值,并与Yield一起使用返回新的WaitForSeconds。有没有其他的线索可以实现它?似乎不能让变化的速度有机地放慢。
aoyhnmkz1#
你应该在for loop中yield协程,从你最初的变化率开始,随着我们学习每一个精灵而改变变化率。这里是代码。
for loop
yield
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; } }
1条答案
按热度按时间aoyhnmkz1#
你应该在
for loop
中yield
协程,从你最初的变化率开始,随着我们学习每一个精灵而改变变化率。这里是代码。