C# 如何在unity中从远程服务器更新数据?

C# 如何在unity中从远程服务器更新数据?,c#,unity3d,C#,Unity3d,我对统一还不熟悉,现在正处于学习阶段 我正在尝试从Unity游戏中将coins和diamond更新到apache服务器 我从后端开发人员那里得到了一个URL 这是URL http://192.168.10.89:8080/GameManage/coindiamond/ 邮递员中的邮寄请求 在邮递员中测试此url时。硬币和钻石都很好 但当我在统一中测试时,它不会。(后端开发人员不了解unity) 这是我的密码 我已经被困在这里两个星期了。谁来帮帮我 我的代码变成这样 using UnityEn

我对统一还不熟悉,现在正处于学习阶段

我正在尝试从Unity游戏中将coins和diamond更新到apache服务器

我从后端开发人员那里得到了一个URL

这是URL

http://192.168.10.89:8080/GameManage/coindiamond/
邮递员中的邮寄请求

在邮递员中测试此url时。硬币和钻石都很好

但当我在统一中测试时,它不会。(后端开发人员不了解unity)

这是我的密码

我已经被困在这里两个星期了。谁来帮帮我

我的代码变成这样

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;

public class PostJsonDataScript : MonoBehaviour
{
    public int id, coin, diamond;
    string url = "http://192.168.10.89:8080/GameManage/coindiamond/";

    private IEnumerator UpdateUser(int userId, int userCoin, int userDiamond)
    {
        userId = 1;
        userCoin = 2;
        userDiamond = 3;

        var json = "{\"id\":\"" + userId + "\",\"coin\":\"" + userCoin + "\",\"diamond\":\"" + userDiamond + "\"}";

        Debug.Log(json);

        UnityWebRequest www = UnityWebRequest.Post(url, json);

        {

            www.SetRequestHeader("Content-Type", "application/json");
            www.SetRequestHeader("Accept", "text/json");



            yield return www.SendWebRequest();


            if (www.isNetworkError || www.isHttpError)
            {
                Debug.LogErrorFormat(this, "Upload failed with: {0} - {1}", www.responseCode, www.error);
            }
            else
            {
                Debug.Log("Form upload complete!");
            }
        }
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            id = 1;
            coin = 2;
            diamond = 3;
            StartCoroutine(UpdateUser(id, coin, diamond));
        }
    }
}
我的语法正确吗


我上传失败,原因是:400-通用/未知Http错误

您创建了表单,但从未将其发送到服务器

使用

然后像这样开始

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        id = 1;
        coin = 3;
        diamond = 4;
        StartCoroutine (UpdateUser(id, coin, diamond));
    }
}

请注意,
WWWForm
的使用也是一种传统方式,仅在允许从过时的
WWW
进行迁移时才仍然受到支持

您可能希望使用一个,如图所示


然而,在
postman
中,您实际上发布的是一个JSON字符串而不是表单数据,并且还使用字符串作为值而不是数字值。所以也许你应该试着这样做

var json = "{\"id\":\"" + userId + "\",\"coin\":\"" + userCoin + "\",\"diamond\":\"" + userDiamond + "\"}";

UnityWebRequest www = UnityWebRequest.Post(url, json)
{
    ...
}


旁注:
192.168.10.89:8080
是本地网络地址,不在internet中路由。因此,只有当运行Unity的设备与服务器位于同一本地网络中,或者至少路由正确时,它才起作用。

您创建了表单,但从未真正将表单发送到服务器

使用

然后像这样开始

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        id = 1;
        coin = 3;
        diamond = 4;
        StartCoroutine (UpdateUser(id, coin, diamond));
    }
}

请注意,
WWWForm
的使用也是一种传统方式,仅在允许从过时的
WWW
进行迁移时才仍然受到支持

您可能希望使用一个,如图所示


然而,在
postman
中,您实际上发布的是一个JSON字符串而不是表单数据,并且还使用字符串作为值而不是数字值。所以也许你应该试着这样做

var json = "{\"id\":\"" + userId + "\",\"coin\":\"" + userCoin + "\",\"diamond\":\"" + userDiamond + "\"}";

UnityWebRequest www = UnityWebRequest.Post(url, json)
{
    ...
}



旁注:
192.168.10.89:8080
是本地网络地址,不在internet中路由。因此,只有当运行Unity的设备与服务器位于同一个本地网络中,或者至少路由正确时,它才会工作。

错误是什么?在代码中,我给出id=1;硬币=2;钻石=3;当我运行该程序时,它应该将这些值更新到服务器中,但它不会@johnnyi如果您正在执行post,那么服务器需要处理该请求。这不再与Unity相关,但更可能是php、nodeJS或其他服务器端开发。您创建了一个
WWWForm
,但我没有看到任何创建请求的尝试,例如使用
UnityWebRequest.Post
,以便实际将请求发送到服务器…?顺便说一句
WWW
也是过时的。也许最好使用
UnityWebRequest.Post
…错误是什么?在代码中,我给出id=1;硬币=2;钻石=3;当我运行该程序时,它应该将这些值更新到服务器中,但它不会@johnnyi如果您正在执行post,那么服务器需要处理该请求。这不再与Unity相关,但更可能是php、nodeJS或其他服务器端开发。您创建了一个
WWWForm
,但我没有看到任何创建请求的尝试,例如使用
UnityWebRequest.Post
,以便实际将请求发送到服务器…?顺便说一句
WWW
也是过时的。也许最好使用
UnityWebRequest.Post
…我复制了您的代码并进行了多次测试。仍然没有更新。现在我的大脑着火了。无论如何,谢谢你的回复。您认为服务器端代码需要更改吗@derHugo@KhantMinSiThu我不知道你的服务器端代码。。。您的请求是否有任何错误,或者您是否已完成输出
表单上传?如果Unity端工作正常,那么服务器或表单本身可能有问题。。请注意,您在
postman
中发送的内容似乎是一个JSON字符串,而不是一个表单……是的,它是一个JSON字符串。我试着按照你的教导去改变。但是数据不会进入服务器。我收到一条错误消息{Generic/Unknown Http error}而且我没有收到任何debug.log。上载失败或表单上载完成。如果您没有收到任何调试日志,那么您从哪里得到
错误消息{Generic/Unknown Http error}
?很抱歉,这是上载失败造成的。现在我尝试添加以下两行内容:www.SetRequestHeader(“内容类型”、“应用程序/json”);www.SetRequestHeader(“接受”、“文本/json”);因为我得到了一个错误代码405。但在此之后,我得到了错误代码400+通用/未知Http错误仍然不会上传@derHugoI复制了您的代码并进行了多次测试。仍然没有更新。现在我的大脑着火了。无论如何,谢谢你的回复。您认为服务器端代码需要更改吗@derHugo@KhantMinSiThu我不知道你的服务器端代码。。。您的请求是否有任何错误,或者您是否已完成输出
表单上传?如果Unity端工作正常,那么服务器或表单本身可能有问题。。请注意,您在
postman
中发送的内容似乎是一个JSON字符串,而不是一个表单……是的,它是一个JSON字符串。我试着按照你的教导去改变。但是数据不会进入服务器。我收到一条错误消息{Generic/Unknown Http error}而且我没有收到任何debug.log。上载失败或表单上载完成。如果您没有收到任何调试日志,那么您从哪里得到
错误消息{Generic/Unknown Http error}
?很抱歉,这是上载失败造成的。现在我尝试添加以下两行内容:www.SetRequestHeader(“内容类型”、“应用程序/json”);www.SetRequestHeader(“接受”、“文本/json”);因为我得到了一个错误代码405。但在那之后,我得到了错误代码400+通用/未知Http错误仍然不会上传@derHugo