GUILayout.BeginScrollView - 如何加载从http下载的图像

时间:2013-11-29 06:59:23

标签: unity3d unityscript

我的问题与Unity3D有关。 我有一个从http下载的图片网址列表。 我只想在GUILayout.BeginScrollView上显示这些图像。 我从几天开始搜索它,但没有得到任何适当的答案。

这是我的代码Sample,

public void OnSuccess(object responseFromServer)
{
  File imageObj = (File)responseFromServer;
  IList<File.Image> imageList = imageObj.GetFileList();
  for (int i = 0; i < imageList.Count; i++)
   {
    Debug.Log ("Downloaded Image Url Is  : " + imageList[i].GetUrl());
   }
}

现在,我有许多Image Urls,但是如何在GUILayout.BeginScrollview上显示这些网址的图片。 Thanx任何帮助。

2 个答案:

答案 0 :(得分:1)

@Akshay嗨,你们都准备好了,试试吧......

如果你有一个图像列表,然后将它们添加到IList中,得到它,并使用texture2D inOrder将这些图像显示到scrollview。看看这个,我想你的回答......

public void OnSuccess(object responseFromServer)
{
  File imageObj = (File)responseFromServer;
  IList<File.Image> imageList = imageObj.GetFileList();
  for (int i = 0; i < imageList.Count; i++)
   {
    Debug.Log ("Downloaded Image Url Is  : " + imageList[i].GetUrl());
// just add this in your callBack response. ClassName shoud be where you want to show your // images i.e OnGUI defined..
    (Your_MonoBehaviour_ClassName).GetInstance().ExecuteShow(imageList[i].GetUrl());

   }
}

现在在你的主类中写下这个restcall,你想把这些图像添加到scrollview ......这真的很简单......

private static Your_class_Name con = null;

    public static Your_class_Name GetInstance ()
                    {
                            if (con == null) {
                                    con = (new GameObject ("Your_class_Name")).AddComponent<Your_class_Name> ();
                                    return con;
                            } else {
                                    return con;
                            }
                    } 

public string ExecuteShow (string url)
        {
               string responseFromServer = null;
               StartCoroutine (ShowAllImages (url));
               return responseFromServer;
        }

            IEnumerator ShowAllImages (string uri)
            {
                    IEnumerator e = executeShowAll (uri);
                    while (e.MoveNext())
                    {
                            yield return e.Current;
                    }
            }


    IEnumerator executeShowAll (string url)
            {
                    WWW www = new WWW (url);
                    while (!www.isDone) 
                            {

                                    yield return null;  
                            }
                            if (www.isDone)
                    {
                      listOfImages.Add(www.texture);        
                    }

            }

现在你正在找到那个listOfImages的内容..这只是一个“IList listOfImages = new List();” ,这背后的目的是......看到..

//========Setting Up ScrollView====================================================        
                scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(155));
                if(listOfImages.Count > 1)
                {
                        for(int i=0; i<listOfImages.Count; i++)
                        {
                                Texture2D myImage = (Texture2D)listOfImages[i];
                                GUILayout.Label(myImage,GUILayout.Height(100),GUILayout.Width(100));
                        }
                }
         GUILayout.EndScrollView();
                //========ScrollView=============================================================== 

我想,你明白了......因为我在努力...而且它非常简单..

答案 1 :(得分:0)

如果你可以在Texture2D中获取你的图像,我有滚动视图的工作代码。

void OnGUI()
{ 
        savedMatrix=GUI.matrix;
        scrollPosition = GUI.BeginScrollView (new Rect (250f,10f,500f,1000f),scrollPosition, new Rect (10f, 0f, 250f, snaps.Length*150f));
        for(int i=0;i<snaps.Length;i++)
        {
            GUI.DrawTexture(new Rect(0f,10f+i*140f,250f,200f),snaps[i]);
        }
        GUI.EndScrollView();
        GUI.matrix=savedMatrix;
}

对于来自服务器的texture2D,请使用此

IEnumerator Start() 
{
    WWW www = new WWW(url);
    yield return www;
    snap.Add(www.texture);
}