主要是实现显示网络头像。
只要扩展装载器就可以了。
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 }