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