Как обновить данные с удаленного сервера в единстве? - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в Unity и сейчас на этапе обучения.

Я пытаюсь обновить монеты и алмазы на сервере Apache из игры Unity.

Я получил URL-адрес из бэкэндаdeveloper

Это URL

http://192.168.10.89:8080/GameManage/coindiamond/

POST-запрос в почтальоне

При проверке этого URL в почтальоне.Монеты и бриллианты прекрасно обновляются.

Но когда я тестирую в Unity, это не так.(Бэкэнд-разработчик не получил никаких знаний о единстве).

Вот мой код на C #.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;

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

    private void Start()
    {

    }

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


    public void UpdateUser(int id, int coin, int diamond)
    {
        WWWForm form = new WWWForm();
        form.AddField("id", id);
        form.AddField("coin", coin);
        form.AddField("diamond", diamond);
    }
}

Я застрял здесь уже 2 недели.Кто-то, пожалуйста, помогите мне

Мой код стал таким

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

1 Ответ

2 голосов
/ 11 марта 2019

Вы создали свою форму, но никогда не отправляете ее на сервер!

Использовать UnityWebRequest.Post

private IEnumerator UpdateUser(int userId, int userCoin, int userDiamond)
{
    WWWForm form = new WWWForm();
    form.AddField("id", userId);
    form.AddField("coin", userCoin);
    form.AddField("diamond", userDiamond);

    using (UnityWebRequest www = UnityWebRequest.Post(url, form))
    {
        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!", this);
        }
    }
}

И вместо этого запустите как

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

Обратите внимание, что использование WWWForm также является устаревшим способом и все еще поддерживается только для того, чтобы разрешить переход с WWW, который устарел.

Возможно, вы захотите использовать MultipartFormDataSection вместо этого, как показано здесь


Однако кажется, что в postman вы фактически публикуете строку JSON, а не данные формы, и также используете строки в качестве значений вместо числовых. Так что, возможно, вам следует попробовать сделать это вместо

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

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

Sidenote: 192.168.10.89:8080 является адресом локальной сети и не маршрутизируется в Интернете. Поэтому он работает только в том случае, если устройство, на котором вы запускаете Unity, находится в той же локальной сети, что и ваш сервер, или хотя бы правильно маршрутизировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...