【问题标题】:Unity 3D c# yield return www hangs on particular URLUnity 3D c# yield return www 挂在特定的 URL
【发布时间】:2015-11-27 17:16:59
【问题描述】:

我正在 Unity 中构建一个策略游戏,它使用 HTTP 与服务器通信,通过 WWW 请求检索 JSON 对象。到目前为止它工作正常,但是最近我添加了一个遇到奇怪问题的测试人员。注册过程调用的 URL 之一挂在 IEnumerator 的“yield return www”处。用户尝试了两台不同的机器和两个不同的互联网提供商,这表明这不是环境问题。

IEnumerator 代码如下:

    IEnumerator WaitForRequest(WWW www)
    {
        addLogEntry("IEnumerator: "+www.url);
        yield return www;

        if (www.error == null)
        {
            addLogEntry("IEnumerator: " + www.url+" no error");
            // do stuff
        }
        else
        {
            addLogEntry("IEnumerator: " + www.url + " " + www.error);
            Debug.Log("WWW Error: " + www.error);
        }
    }

url 为所有用户返回相同的值,只有一个有这个问题。服务器端没有错误,也没有连接问题,因为所有其他 url 在同一台机器和客户端上运行速度很快。

有谁知道什么会导致这种行为?

【问题讨论】:

  • 如果他只访问特定的 URL 会发生什么?
  • 我没试过,因为没那么简单,需要POST数据,所以不能准确告诉他放到浏览器中。不过这是一个好点,我必须检查一下,谢谢!
  • 是的,这有点问题,但我确实会使用另一段代码或 CURL 或其他任何东西来设置一些东西,看看问题是否仍然存在于您的代码之外。特别是对于这样一个关闭。
  • 我会检查的。我有一个关于这个问题的理论,但我看不到两个事件相关联。这个 URL 唯一不同的是,其余的工作正常,这是在启动 iTween 动画时同时加载的(我有两个 onClick 监听器附加到一个按钮,一个启动动画,另一个加载另一个网址)。我看不出 iTween 会如何影响另一个类中的 IEnumerator,但这是我能看到的唯一区别,什么有效,什么无效。
  • 我认为 iTween 不会造成任何问题。您可以通过禁用该动画来确认它。如果您可以使用 curl 输出或其他工具(例如 requestmaker.com)的输出进行报告,那就太好了(感谢 Google)。

标签: c# unity3d


【解决方案1】:

曾经我也遇到过同样的问题。当时,问题是一个 URL 需要花费太多时间来做出响应。根据我的代码逻辑,附加了 monobehavior 并且正在运行协程的 GameObject 被禁用,导致带有协程的游戏对象死亡。我想我应该分享我遇到的问题。

【讨论】:

  • 啊!这正是可能发生的事情!我有动画将窗口滑出屏幕以使其停用。停用计时器为 0.3 秒,对于位于大洋彼岸的测试人员来说,这可能还不够。我会马上检查的。谢谢!
  • 是的,测试人员确认,增加启动 url 加载和关闭对象之间的延迟修复了问题。谢谢 Umair!
猜你喜欢
  • 2017-01-02
  • 2016-06-15
  • 2019-06-19
  • 1970-01-01
  • 2018-11-09
  • 2015-09-20
  • 1970-01-01
  • 2018-06-05
  • 2021-11-18
相关资源
最近更新 更多