【问题标题】:How to show images in Unity from Web Service?如何通过 Web 服务在 Unity 中显示图像?
【发布时间】:2019-07-20 09:13:31
【问题描述】:

首先,请原谅我的英语不好。我正在尝试使用文本调用我存储在数据库中的一些图像。我可以显示文本,但我不知道如何显示图像。图像保存在 Web 服务文件中名为“upload”的文件夹中。文字通过他的ID给他打电话,我希望相关的图像也能显示出来。

我是这样称呼的:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using SimpleJSON;

public class DataLoader : MonoBehaviour
{
    string JsonDataString;
    string JsonDataString2;
    static public string OriginalJsonSite;

    public Text Titulo;
    public Text Texto;

    IEnumerator Start ()
    {
        WWW readingsite = new WWW (OriginalJsonSite);
        Debug.Log(OriginalJsonSite);
        yield return readingsite;


        if (string.IsNullOrEmpty (readingsite.error)) {
            JsonDataString = readingsite.text;
            JsonDataString2 = JsonDataString.Substring(3, JsonDataString.Length - 4);
        }


        JSONNode jsonNode = SimpleJSON.JSON.Parse (JsonDataString2);
        Debug.Log(JsonDataString2);

        Titulo.text = jsonNode["titulo"].ToString().ToUpper();
        Debug.Log(jsonNode["titulo"]);
        Texto.text = jsonNode["texto"].ToString().ToUpper();
        Debug.Log(jsonNode["texto"]);
    }}

这就是我展示的方式:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PlaceInfo : MonoBehaviour
{
    public string escenaInfo;
    public string id;

    void OnMouseOver()
    {
        DataLoader.OriginalJsonSite = "http://(Website name)/API/test.php?id=" + id;
        SceneManager.LoadScene(escenaInfo);
    }
    void OnMouseDown()
    {
        DataLoader.OriginalJsonSite = "http://(Website name)/API/test.php?id=" + id;
        // this object was clicked - do something
        SceneManager.LoadScene(escenaInfo);
    }}

这是我保存的数据之一。

[{"_id":{"$oid":"5d30f06ba6e0712cf41c93d3"},"titulo":"Museo Hist\u00f3rico y Arqueol\u00f3gico de Conc\u00f3n","texto":"Es el lugar que resguarda y cobija los elementos ancestrales, hist\u00f3ricos y tradicionales de la localidad y est\u00e1 interesado en recuperar la memoria, como elemento basic para la construcci\u00f3n de identidad que nos permita romper el aislamiento.","fileName":"museo.jpg "}]

这是图片的网址:

http://(web service name)/upload/museo.jpg

【问题讨论】:

  • 网站如何提供图片? API 在响应中发送什么?问题中没有足够的信息来给出完整的答案。
  • 这是我保存的数据之一。 [{"_id":{"$oid":"5d30f06ba6e0712cf41c93d3"},"titulo":"Museo Hist\u00f3rico y Arqueol\u00f3gico de Conc\u00f3n","texto":"Es el lugar que resguarda y cobija los elementos祖先, hist\u00f3ricos y tradicionales de la localidad y est\u00e1 interesado en recuperar la memoria, como elemento basic para la construcci\u00f3n de identidad que nos permita romper el aislamiento.","fileName":"museo.jpg"}]这是图片的网址:http://(web service name)/upload/museo.jpg

标签: c# unity3d


【解决方案1】:

您已经有了文件名 (jsonNode["fileName"]),所以只需使用 UnityNetworking.UnityWebRequest.Get 然后 convert it to a texture and display it 获取文件:

using UnityEngine.Networking;

public RawImage displayTexture;

IEnumerator Start ()
{
    WWW readingsite = new WWW (OriginalJsonSite);
    Debug.Log(OriginalJsonSite);
    yield return readingsite;

    if (string.IsNullOrEmpty (readingsite.error)) {
        JsonDataString = readingsite.text;
        JsonDataString2 = JsonDataString.Substring(3, JsonDataString.Length - 4);
    }

    JSONNode jsonNode = SimpleJSON.JSON.Parse (JsonDataString2);
    Debug.Log(JsonDataString2);

    Titulo.text = jsonNode["titulo"].ToString().ToUpper();
    Debug.Log(jsonNode["titulo"]);
    Texto.text = jsonNode["texto"].ToString().ToUpper();
    Debug.Log(jsonNode["texto"]);

    string imageUrl = "http://(web service name)/upload/" + fileName;

    UnityWebRequest imageRequest = UnityWebRequest.Get(imageUrl);
    yield return imageRequest.SendWebRequest();

    if(imageRequest.isNetworkError || imageRequest.isHttpError) {
        Debug.Log(imageRequest.error);
    }
    else {
        byte[] imageBytes = imageRequest.downloadHandler.data;

        Texture2D tex = new Texture2D(2, 2);
        tex.LoadImage(imageBytes);
        displayTexture.texture = tex;
    }
}

只需确保在统一检查器中将RawImage 分配给displayTexture,然后将RawImage 添加到Canvas,它将显示在您需要的位置。

【讨论】:

  • 嗨,我在你展示的代码中有一个问题,“imageBytes”是如何工作的?当我将它添加到代码中时,它告诉我它在当前上下文中不存在。
  • @EduardoHerrera 很抱歉。我的意思是这条线是byte[] imageBytes = imageRequest.downloadHandler.data;。那应该解决它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2012-10-06
相关资源
最近更新 更多