FairyGUI裝載器加載網絡圖片


主要是實現顯示網絡頭像。

 

只要擴展裝載器就可以了。

 

 1 using FairyGUI;
 2 using UnityEngine;
 3 using Api;
 4 using System.IO;
 5 
 6 namespace Tools
 7 {
 8     public class HttpLoader : GLoader
 9     {
10         protected override void LoadExternal()
11         {
12             // 這里主要是區分在家本地資源和網絡資源,
13             // 因為我的網絡url是 /static開頭的,所以在這里做個判斷。
14             // 如果不判斷,本地資源就無法加載,導致場景無法正確加載
15             if (!url.StartsWith("/static/"))
16             {
17                 base.LoadExternal();
18                 return;
19             }
20 
21             Client client = new Client();
22             byte[] imgBytes = client.GetBytes(url);
23             Texture2D tex = new Texture2D(0, 0);
24             tex.LoadImage(imgBytes);
25             tex.Apply();
26             if (tex != null)
27                 onExternalLoadSuccess(new NTexture(tex));
28             else
29                 onExternalLoadFailed();
30         }
31     }
32 }

 

然后調用下方的方法,最好是在第一個場景的構造方法中調用。

UIObjectFactory.SetLoaderExtension(typeof(Tools.HttpLoader));

 

最后,獲取設計的界面中的裝載器,設置url即可

mainUI.GetChild("imgAvatar").asLoader.url = "/static" + j["data"]["user"]["avatar"].str;

 

編輯器中的設計圖

 

 

unity中運行效果

 

Client類自己隨便封裝的http請求類,也順便發一下。

 1 namespace Api
 2 {
 3     using System.Net.Http;
 4     using System;
 5     using System.Collections.Generic;
 6     public class Client : HttpClient
 7     {
 8         private string baseUrl = "http://192.168.1.105";
 9         public Client()
10         {
11             this.DefaultRequestHeaders.Add("user-agent", "game");
12         }
13 
14         ~Client()
15         {
16             this.Dispose();
17         }
18 
19         public Client(string token)
20         {
21             this.DefaultRequestHeaders.Add("user-agent", "game");
22             if (token != "")
23             {
24                 this.DefaultRequestHeaders.Add("token", token);
25             }
26 
27 
28         }
29 
30         /// <summary>
31         /// Get請求返回Response
32         /// </summary>
33         /// <param name="url">要請求的地址</param>
34         /// <returns>返回response</returns>
35         public HttpResponseMessage Get(string url)
36         {
37             return this.GetAsync(this.baseUrl + url).Result;
38         }
39 
40         /// <summary>
41         /// get請求獲取返回的內容
42         /// </summary>
43         /// <param name="url">要請求的地址</param>
44         /// <returns>返回網頁內容</returns>
45         public string GetContent(string url)
46         {
47             return this.Get(url).Content.ReadAsStringAsync().Result;
48         }
49 
50         public byte[] GetBytes(string url)
51         {
52             return this.Get(url).Content.ReadAsByteArrayAsync().Result;
53         }
54 
55         public HttpResponseMessage Post(string url, List<KeyValuePair<string, string>> paramList)
56         {
57             return this.PostAsync(new Uri(this.baseUrl + url), new FormUrlEncodedContent(paramList)).Result;
58         }
59 
60         public string PostContent(string url, List<KeyValuePair<string, string>> paramList)
61         {
62             return this.Post(url, paramList).Content.ReadAsStringAsync().Result;
63         }
64 
65         public HttpResponseMessage Put(string url, List<KeyValuePair<string, string>> paramList)
66         {
67             return this.PutAsync(new Uri(this.baseUrl + url), new FormUrlEncodedContent(paramList)).Result;
68         }
69 
70         public string PutContent(string url, List<KeyValuePair<string, string>> paramList)
71         {
72             return this.Put(url, paramList).Content.ReadAsStringAsync().Result;
73         }
74 
75         public HttpResponseMessage Del(string url)
76         {
77             return this.DeleteAsync(this.baseUrl + url).Result;
78         }
79 
80         public string DelContent(string url)
81         {
82             return this.Del(url).Content.ReadAsStringAsync().Result;
83         }
84 
85     }
86 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM