【问题标题】:Calculating time it takes to request data from client to server - Unity计算从客户端向服务器请求数据所需的时间 - Unity
【发布时间】:2016-09-20 21:28:35
【问题描述】:

所以标题说明了一切 - 但是我尝试的方法似乎不起作用,我不知道为什么。

 public static IEnumerator RetrieveCharacterData(string userid, Action<string> charSelectResponse)
 {
    WWWForm data = new WWWForm();
    data.AddField("userid", userid);

    // Send request to server
    WWW characterSelectRequest = new WWW(Helper.Constants.kCharacterSelectUrl, data);
    float elapsedTime = 0.0f;

    while (!characterSelectRequest.isDone)
    {
        elapsedTime += Time.deltaTime;

        Debug.Log(elapsedTime); // This prints in real time the correct data

        if (elapsedTime >= Helper.Constants.ConnectionTimeoutInterval)
        {
            Debug.Log("Server error: Connection has timed out.");
            yield return null;
        }
    }

    // This doesn't work - prints out garbage values
    Debug.Log(elapsedTime); 


    if (!characterSelectRequest.isDone || !string.IsNullOrEmpty(characterSelectRequest.error))
    {
        charSelectResponse.Invoke(null);
        yield break;
    }
    charSelectResponse.Invoke(characterSelectRequest.text);
}
  • 所以经过一些编辑后,这让我最接近我想要的 - 但是当我尝试获取实际的 elapsedTime 时,它​​会打印出垃圾值。

【问题讨论】:

    标签: c# unity3d client-server


    【解决方案1】:

    if (Time.time - startTime &gt;= Helper.Constants.ConnectionTimeoutInterval)

    &gt;= 应该是 &lt;

    目前,在请求完成之前,您会陷入该循环而没有屈服。然后它会跳过下一个 if 块,并最终在同一个调用上执行 elapsedTime 检查,而不会让步,就 Unity 的时间而言,导致时间差为零。

    【讨论】:

    • 这不是问题
    • 是的,你是对的。这实际上是问题所在。+1 虽然,您需要修复此问题以在达到超时(ConnectionTimeoutInterval)时退出该功能。您当前的答案没有这样做。我认为这就是为什么那里有 if 语句。
    • 我的问题不在于计算,这就是为什么 elasedTime 出现垃圾值的原因......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多