Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 螺纹应为';我不能再跑步了_C#_Unity3d - Fatal编程技术网

C# 螺纹应为';我不能再跑步了

C# 螺纹应为';我不能再跑步了,c#,unity3d,C#,Unity3d,我有一个对象和一个脚本附加到它。 我想在脚本的Update功能中将数据发送到web服务器 所以我创建了一个WWW对象。 但过了一段时间,Unity开始报告“线程不应该再运行了” 以下是更新功能: void Update () { //ambil tindakan dari server //bikin object www //bikin request ke localhost/vacuum?r=index/action

我有一个对象和一个脚本附加到它。 我想在脚本的
Update
功能中将数据发送到web服务器

所以我创建了一个WWW对象。 但过了一段时间,Unity开始报告“线程不应该再运行了”

以下是更新功能:

void Update () 
    {
        //ambil tindakan dari server

        //bikin object www
        //bikin request ke localhost/vacuum?r=index/action
        //ambil hasilnya (json)

        //ambil perintah

        //eksekusi perintah

        //scan lingkungan
        var fwd = transform.TransformDirection (Vector3.forward);
        var left = transform.TransformDirection (Vector3.left);
        var right = transform.TransformDirection (Vector3.right);
        var back = transform.TransformDirection (Vector3.back);
        RaycastHit hit_fwd = new RaycastHit(), 
                   hit_left = new RaycastHit(), 
                   hit_right = new RaycastHit(), 
                   hit_back = new RaycastHit();
        bool bool_hit_fwd, bool_hit_left, bool_hit_right, bool_hit_back;
        float 
            distance_fwd = 0.0f, 
            distance_left = 0.0f, 
            distance_right = 0.0f, 
            distance_back = 0.0f;

        bool_hit_fwd = Physics.Raycast (transform.position, fwd, out hit_fwd, 50);
        bool_hit_left = Physics.Raycast (transform.position, left, out hit_left, 50);
        bool_hit_right = Physics.Raycast (transform.position, right, out hit_right, 50);
        bool_hit_back = Physics.Raycast (transform.position, back, out hit_back, 50);

        if (bool_hit_fwd) 
        {
            distance_fwd = hit_fwd.distance;
        }

        if (bool_hit_left) 
        {
            distance_left = hit_left.distance;
        }

        if (bool_hit_right) 
        {
            distance_right = hit_right.distance;
        }

        if (bool_hit_back) 
        {
            distance_back = hit_back.distance;
        }

        transform.Rotate(0, 0.01f, 0);

        print(
            "rot-y/pos-x/pos-y :: fwd/left/right/back = " + 
            transform.rotation.eulerAngles.y + '/' +
            transform.position.x + '/' +
            transform.position.y + '/' +

            " :: " +
            distance_fwd + '/' + 
            distance_left + '/' + 
            distance_right + '/' + 
            distance_back);

        String url = "http://localhost:1234/minibrain?" +
            "roty=" + transform.rotation.eulerAngles.y.ToString() + 
            "&posx=" + transform.position.x.ToString() + 
            "&posy=" + transform.position.y.ToString() + 
            "&fwddist=" + distance_fwd.ToString() + 
            "&leftdist=" + distance_left.ToString() + 
            "&rightdist=" + distance_right.ToString() + 
            "&backdist=" + distance_back.ToString();

        WWW www = new WWW(url);
    }
没有错误。web服务器已正确接收数据。但数据传输速率大大降低。从每秒100次传输下降到每秒10次传输


有没有一种方法可以创建WWW对象而不会导致“线程不应该再运行”

这里的问题很可能是您运行了
更新()中的所有内容。这通常会以最快的速度推进。您对WWW的呼叫将立即返回(不会等到所有操作完成),然后您将进入下一帧

因此,如果您的更新运行得足够快,那么最终将有越来越多的WWW对象尚未完成。我不知道它目前运行的速度有多快,但你必须问问自己,你是否需要那么多的数据点,或者通过WWW呼叫是最好的方法。如果在您的设置中可用,套接字连接可能工作得更好


如果您对以尽可能快的速度发送数据感到满意,请确保您通过将调用设置为协同路由来检查是否存在错误,或者在这种情况下,只允许返回。(不要在上面使用while循环)或者只确定一个您想要数据的固定时间间隔,然后在这个时间间隔发送数据,如果在那里的设置更容易的话

使用。在Update()函数中实现web请求是一种糟糕的体验,因为执行web请求需要一些时间

请注意,[unity]标记不适用于unity 3D。所以请坚持使用[unity3d]标签。是的,巴特。我想你已经提醒我了。很久以前。谢谢。哈,好吧,我不记得了。你肯定不是唯一犯这个小错误的人。我希望我的回答对你有用