簡體   English   中英

Unity3d-協程中的For循環

[英]Unity3d - Coroutine in For Loop

我正在使用Unity3D(特別是C#)進行工作,並且試圖編寫一個For循環,以1個循環實例化多個游戲對象,但是我想在實例化下一個游戲對象之前將它們的實例化稍作調整,例如0.5秒。 。

我認為這就像進行普通循環一樣簡單:

for (int i = 0; i <= 3; i++)
            {
                Instantiate(gameObject, objectSpawn[i].transform.position, Quaternion.identity);
                StartCoroutine(WeaponsCooldown(6));
            }
            StartCoroutine(WeaponsCooldown(2));

在我的couroutine中,我有一個開關盒,這樣我就可以多次重復使用(想想一艘船上的多個難點之類的東西)

IEnumerator WeaponsCooldown(int coolTrigger)
{
    switch (coolTrigger)
    {
    case 1:
        mainFire = true;
        yield return new WaitForSeconds(5);
        mainFire = false;
        break;

    case 2:
        leftFire = true;
        yield return new WaitForSeconds(3);
        leftFire = false;
        break;
...down to case 6 (for this project)

因此,我得到的結果是:for循環之外的StartCoroutine可以正常發射-這是該武器的主要冷卻時間,可防止玩家通過垃圾郵件發射它。 但是,for循環中的startcoroutine似乎並不會減慢for循環的速度,而且我對Unity3D腳本和C#還是很陌生,因此我不確定如何解決這個問題。

我假設StartCoroutine是一個獨立於Update線程的線程,這就是For循環繼續的原因,因為它不等待協程完成。

如果是這樣的話,除了在玩家的每個難點上放置單個腳本並為每個游戲者設置錯開的開始時間(或游戲對象實例化延遲)之外,還有人有什么想法嗎?

我想要在1個腳本中全部完成游戲的主要原因是,玩家可以擁有25個以上的難點,這將使它在具有較少難點的多艘船上重用變得更容易,並且以后更便於我個人進行管理。

謝謝大家提前提供的任何見解,尼克·威爾考克斯(Nick Willcox)

但是,for循環內的startcoroutine似乎不會減慢for循環的速度

不,不是。 腳本的結果是在同一幀中實例化所有GameObject並啟動所有協程(其中一個協程持續時間不同,冷卻時間也不同)。

我假設StartCoroutine是一個獨立於Update線程的線程,這就是For循環繼續的原因,因為它不等待協程完成。

不:) 協程生活在同一個線程中。 它們只是迭代器塊 引用喬恩·斯凱特(Jon Skeet):

在C#2中,當您使用迭代器塊實現IEnumerable或IEnumerator(或通用形式)時,編譯器會為您完成所有艱苦的工作。 它為您構建一個狀態機,獲得的迭代器有效地執行迭代器塊中的代碼,並隨其產生值。

我認為描述它們的另一種方法是協作式多任務處理。

我試圖編寫一個For循環,在1個循環中實例化多個游戲對象,但是我想在實例化下一個游戲對象之前將它們的實例化稍稍交錯一下,例如0.5秒。

在不考慮您要實現的特定行為的情況下,延遲實例化調用(0.5秒)的一種簡單方法是將for循環包裝在自己的協程中:

public IEnumerator DelayInstantiate()
{
  for (int i = 0; i <= 3; i++)
  {
     Instantiate(gameObject, objectSpawn[i].transform.position, Quaternion.identity);
     StartCoroutine(WeaponsCooldown(6)); //or do what you want

     yield return new WaitForSeconds(0.5f);
  }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM