下面放出NGUI 制作动态图集的详细源码
  1. List<Texture2D> textures=new List<Texture2D>();
  2.         List<UIAtlas.Sprite> sprits = new List<UIAtlas.Sprite> ();

  3.         for (int i=batch*batchQuantity; i<batchQuantity*(batch+1); ++i) {

  4.             if(i==itemGos.Count)
  5.             {
  6.                 Logger.log("i = "+i+" itemGos = "+itemGos.Count);

  7.                 break;
  8.             }

  9.             UIFriendItem fi=itemGos[i].GetComponent<UIFriendItem>();
  10.             string tempUrl=facebookGraphURL+"/"+fi.firendId+"/picture?access_token="+FacebookCenter.instance.GetAccessToken();
  11.             if(WebTextureCache.InstantiateGlobal().ImageCache.ContainsKey(tempUrl))
  12.             {
  13.                 if(WebTextureCache.InstantiateGlobal().ImageCache[tempUrl].width==50)
  14.                 {
  15.                     textures.Add(WebTextureCache.InstantiateGlobal().ImageCache[tempUrl]);
  16.                     UIAtlas.Sprite sp = new UIAtlas.Sprite ();
  17.                     sp.name=fi.firendId;
  18.                     sprits.Add(sp);
  19.                 }
  20.             }
  21.             
  22.         }

  23.         //
  24.         if(textures.Count>0)
  25.         {
  26.             textures.Add((Texture2D)Resources.Load("Others/photoFrame"));
  27.             UIAtlas.Sprite sp = new UIAtlas.Sprite ();
  28.             sp.name="photoFrame";
  29.             sprits.Add(sp);
  30.             ///------------
  31.             Texture2D atlas = new Texture2D(2048, 2048);
  32.             Rect[] rects;
  33.             rects = atlas.PackTextures ((Texture2D[])textures.ToArray (),0,2048);
  34.             Logger.log("the length is + "+rects.Length);

  35.             if (rects.Length != sprits.Count) {
  36.                 Logger.log("error!! length not match ");
  37.                     }

  38.             for(int i=0; i<rects.Length ; ++i)
  39.             {
  40.                 rects[i]=NGUIMath.ConvertToPixels(rects[i], atlas.width, atlas.height, true);
  41.                 sprits[i].inner=rects[i];
  42.                 sprits[i].outer=rects[i];
  43.                 //Logger.log(rects[i]);
  44.             }


  45.             Material mat = new Material("atlasMat"+batch.ToString());
  46.             mat.shader= Shader.Find("Unlit/Transparent Colored");
  47.             if (mat.shader == null) {
  48.                 Logger.logError("shader is null");
  49.                 }
  50.             mat.mainTexture=atlas;

  51.             var gameobject = new GameObject ("atlasBatch"+batch.ToString());
  52.             UIAtlas newAtlas=gameobject.AddComponent<UIAtlas> ();
  53.             newAtlas.spriteList = sprits;
  54.             newAtlas.spriteMaterial = mat;
  55.             //newAtlas.coordinates = UIAtlas.Coordinates.TexCoords;

  56.             Logger.log("successfully build atlas for batch " +batch.ToString());
  57.             //Logger.log(newAtlas.spriteMaterial.ToString());
  58.         

  59.             createdAtlas.Add (batch, newAtlas);
  60.             batchCompleted.Add (batch);
  61.             batchProcessing.Remove (batch);
  62.         }
  63.         else{
  64.             batchProcessing.Remove (batch);
  65.             Logger.log("picture download failed " +batch.ToString());
  66.         }