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