WWW Unity: не отображается текст - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь присвоить текст, взятый со страницы, связанной с базой данных через класс WWW, Text (в коде linguaitaliana), который я вставил в Unity.

ЧерезВ сценарии, который я предлагаю ниже, я беру имя в функции Update и вставляю его в функцию IEnumerator.

Вот мой код

public class Prova2 : MonoBehaviour
{
    Prova script1;
    public string name;
    public Text linguaitaliana=null;
    IEnumerator Start()
    {
        Thread.Sleep(1000);
        WWW DataIta = new WWW("http://arnaples.altavista.org/QueryTestoITA.phpnum=" +name);
        Debug.Log("http://arnaples.altavista.org/QueryTestoITA.phpnum=" +name);
        string DataString = DataIta.text;
        Debug.Log(DataString);
        linguaitaliana.text = DataString;
    }

    void Update()
    {
        script1=gameObject.GetComponent<Prova>();
        name=script1.due;
    }
}

DataIta правильно, так как ссылка является рабочей.Но когда я делаю DataIta.text, я не получаю нужный текст (он пустой!)

enter image description here

Если я пытаюсь поставить ссылкунепосредственно (без конкатенации) внутри скрипта, как

new WWW("http://arnaples.altavista.org/QueryTestoITA.phpnum=CasaLuigi");
//Debug.Log("http://arnaples.altavista.org/QueryTestoITA.phpnum=" +name);

результат правильный

enter image description here

Просто для завершения это настройкав инспекторе

enter image description here

Таким образом, проблема печати.Решения?

1 Ответ

0 голосов
/ 29 мая 2019

Несколько вопросов здесь:

Прежде всего

Я беру имя в функции обновления и вставляю его в функцию IEnumerator.

Неа! Start выполняется до Update, поэтому вы не передадите имя там. В любом случае это не имеет смысла в методе Update, который вызывается в каждом кадре, поэтому переместите его на вершину Start.


Второй

это Thread.Sleep(1000); не имеет смысла! Я думаю, вы хотите использовать WaitForSeconds

yield return new WaitForSeconds(1);

чтобы подождать секунду.


Наконец

Вы создали http-запрос, используя

WWW DataIta = new WWW("http://arnaples.altavista.org/QueryTestoITA.phpnum=" +name);

но вы не дождетесь окончания загрузки. Вы должны сделать

using(WWW DataIta = new WWW("http://arnaples.altavista.org/QueryTestoITA.phpnum=" + name))
{
    yield return www;

    // use result
}

В общем, я бы рекомендовал вместо WWW использовать UnityWebRequest.Get, который устарел и может быть удален в будущем. А также проверьте наличие ошибок загрузки или подключения

public class Prova2 : MonoBehaviour
{
    Prova script1;
    public string name;
    public Text linguaitaliana=null;
    IEnumerator Start()
    {
        script1=gameObject.GetComponent<Prova>();
        name=script1.due;

        yield return new WaitForSeconds(1);

        using (var webRequest = UnityWebRequest.Get("http://arnaples.altavista.org/QueryTestoITA.phpnum=" + name))
        {
            // Request and wait for the desired page.
            yield return webRequest.SendWebRequest();

            if (webRequest.isNetworkError || webRequest.isHttpError)
            {
                Debug.LogFormat(this, "Download error due to {0} - {1}", webRequest.responseCode, webRequest.error);
            }
            else
            {
                Debug.Log("Download complete: " + webRequest.downloadHandler.text, this);
                linguaitaliana.text = webRequest.downloadHandler.text;
            }
        }
    }
}

Примечание: напечатано на смартфоне, поэтому никаких гарантий, но я надеюсь, что идея проясняется

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