【问题标题】:"for" loop with IEnumerator coroutine containing a yied return not looping带有 IEnumerator 协程的“for”循环,其中包含 yied return 不循环
【发布时间】:2016-01-07 22:21:44
【问题描述】:

我正在从数据库中选择数据,然后使用 c# 将该数据分配给我的统一项目中的数组中的值。使用 php 脚本访问数据库,我的游戏调用服务器上的脚本。我的计划是增加船号并使用相同的脚本调用数据库中的另一艘船。这一切都很好,除了我在 c# 中的循环,它只执行一次。这是我的代码。 shipsAllowed 现在设置为 2 用于测试目的,数据库中有这艘船的记录。所以我做错了什么,看起来很简单,但对我不起作用。感谢您的帮助。

public void AddShipsToShipsArray()
{
    for (int x = 1; x < ShipsAllowed; x++)
    {
        StartCoroutine(GetShipInfoFromDB(x));
    }
}

IEnumerator GetShipInfoFromDB(int x)
{

    shipInfoUrl = "http://localhost/fishwar/GetShipInfo.php?shipnum=" + x + "&id=" + accountNumber;
    WWW shipInfoWWW = new WWW(shipInfoUrl);
    yield return shipInfoWWW;
    shipinfoRawString = shipInfoWWW.text;

    Dictionary<string, object> shipInfo = MiniJSON.Json.Deserialize(shipinfoRawString) as Dictionary<string, object>;

    shipArrayPosition = int.Parse((string)shipInfo["array_position"]);
    ships[shipArrayPosition].shipName = (string)shipInfo["ship_name"];
    ships[shipArrayPosition].departureTime = DateTime.Parse((string)shipInfo["departure_time"]);
    ships[shipArrayPosition].isAtSea = bool.Parse((string)shipInfo["is_at_sea"]);
}

【问题讨论】:

  • 旁注:如果您尝试创建minimal reproducible example,您可能会自己发现问题,或者至少使问题更有针对性(yield return 与问题代码演示无关)。

标签: c# for-loop unity3d yield-return


【解决方案1】:

将循环中的退出条件更改为使用小于或等于:

for (int x = 1; x <= ShipsAllowed; x++) // Change made on this line.
{
    StartCoroutine(GetShipInfoFromDB(x));
}

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多