在Unity

时间:2017-08-01 01:21:57

标签: c# unity3d unity-networking

我试图从Unity3D向我的网络服务器发出POST请求。一切都在编辑器中正常工作,但是当我构建二进制文件并尝试从它们做同样的事情时 - 它看起来并不像它到达服务器。

在服务器上,我将它们处理为:

if(isset($_POST['name']) || isset($_POST['score']))
{
    $name = $_POST['name'];
    $score = $_POST['score'];
    ....
}

在Unity / C#中我这样做:

IEnumerator Upload()
{
    WWWForm form = new WWWForm();
    form.AddField("name", name.text.Replace("|", " ").ToString());
    form.AddField("score", (int)(highScore));
    UnityWebRequest www = UnityWebRequest.Post("https://server_name.com/page.php", form);
    yield return www.Send();
}

有什么理由说它应该在编辑器中运行,并且在运行构建的二进制文件时不应该工作吗?

谢谢!

编辑:根据请求 - 我的二进制文件是为Windows和Linux构建的,两者都有相同的错误。我在Windows上运行编辑器(与使用Windows二进制文件的机器相同) - 我在编辑器中没有任何问题。

1 个答案:

答案 0 :(得分:1)

我甚至不明白这是如何在编辑器内工作的......

您没有按照文档中描述的方式进行操作:

https://docs.unity3d.com/ScriptReference/WWWForm.html

您根本不必使用UnityWebRequest:只有WWW和WWWForm。

试试这个:

IEnumerator Upload () {
    WWWForm form = new WWWForm();
    form.AddField("name", name.text.Replace("|", " ").ToString());
    form.AddField("score", (int)(highScore));

    WWW result = new WWW("https://server_name.com/page.php", form );

    yield return result;

    if(!string.IsNullOrEmpty(result.error)) {
        print( "Error : " + result.error );
    } else {
        Debug.Log(result.text);
    }
}

修改:

好吧,我的坏,你的例子是在doc上。我不知道WWW正在发展(很好的沟通团结......)。

所以我的建议是:继续使用传统的WWW。它的工作非常好。

因为这是经典的统一:当他们说一个新功能出局时,就会崩溃。