为什么这个C#脚本会导致在Unity中循环的游戏对象之间出现滞后峰值?

时间:2018-06-17 21:25:44

标签: c# unity3d

我在C#中编写了一个脚本,它循环播放场景中的游戏对象。它将所有游戏对象存储在一个List中,对它们进行随机化,然后将它们随机化,然后激活它们并以定义的延迟对它们进行去激活。由于某种原因,它将在显示的游戏对象之间随机出现滞后峰值。它偶尔需要比脚本中设置的定义延迟更长的时间来在游戏对象之间循环。就我所知,在出现滞后峰值时,似乎没有任何押韵或理由。脚本编译并运行正常,显示我期望的行为,除了这个随机延迟。关于如何优化它以便没有滞后的任何建议都将非常感激。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Dolwhale : MonoBehaviour{

public List<GameObject> objects;
public int cycleCount = 10;
public float startDelay = 0.0F;
public float secsToWait = 2.0F;


// Use this for initialization
void Start() {
    StartCoroutine(Cycle());    
}

IEnumerator Cycle(){

    yield return new WaitForSeconds(startDelay);

    for (int i = 0; i < cycleCount; i++){

        HelperFunctions.Shuffle (objects);

        foreach (GameObject current in objects){
            current.SetActive(true);

            yield return new WaitForSeconds(secsToWait);

            current.SetActive(false);
        }
    }
  }
}


public static class HelperFunctions { 

    public static void Shuffle<T>(this IList<T> list){

        int l = list.Count;

        for (int i = 0; i < l; i++) {
            //pick new random index
            int random = i + Random.Range (0, l - i);

            //swap into new spot
            T newSpot = list [random];
            list [random] = list [i];
            list [i] = newSpot;

        }
    }   
 }

0 个答案:

没有答案