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]标签。是的,巴特。我想你已经提醒我了。很久以前。谢谢。哈,好吧,我不记得了。你肯定不是唯一犯这个小错误的人。我希望我的回答对你有用