日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UGUI打图集

發布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UGUI打图集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; using System.IO; using System.Text;public class AtlasCreate { //用來保存圖片中的設置信息 比如用RGBA32壓縮格式等 public class TextureImporterSettings { public bool isReadable;//紋理信息在內存中是否可讀 public TextureImporterFormat textureFormat;//紋理的格式public TextureImporterSettings(bool isReadable, TextureImporterFormat textureFormat) { this.isReadable = isReadable; this.textureFormat = textureFormat; } } //用來保存單個圖片的信息 public class SpriteInfo { public string name;//圖片的名字 public Vector4 spriteBorder;//圖片的包圍盒(如果有的話) public Vector2 spritePivot;//圖片包圍盒中的中心軸(如果有的話) public float width; public float height;public SpriteInfo(string name, Vector4 border, Vector2 pivot, float w, float h) { this.name = name; spriteBorder = border; spritePivot = pivot; width = w; height = h; } } static float matAtlasSize = 2048;//最大圖集尺寸 static float padding = 1;//每兩個圖片之間用多少像素來隔開 private static List<SpriteInfo> spriteList = new List<SpriteInfo>(); [MenuItem("Assets/AtlasCreate")] static public void Init() { string assetPath; //根據我們的選擇來獲取選中物體的信息 Object[] objs = Selection.GetFiltered(typeof(Texture), SelectionMode.DeepAssets); //判斷圖片命名的合法性 for (int i = 0; i < objs.Length; i++) { Object obj = objs[i]; if (obj.name.StartsWith(" ") || obj.name.EndsWith(" ")) { string newName = obj.name.TrimStart(' ').TrimEnd(' '); Debug.Log(string.Format("rename texture'name old name : {0}, new name {1}", obj.name, newName)); AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(obj), newName); } } Texture2D[] texs = new Texture2D[objs.Length];//用來保存objs中的物體 if (texs.Length <= 0) { Debug.Log("請先選擇要合并的小圖或小圖的目錄"); return; }for (var i = 0; i < objs.Length; i++) { texs[i] = objs[i] as Texture2D; assetPath = AssetDatabase.GetAssetPath(texs[i]); AssetDatabase.ImportAsset(assetPath);//重新把圖片導入內存,理論上unity工程中的資源在用到的時候,Unity會自動導入到內存,但有的時候卻沒有自動導入,為了以防萬一,我們手動導入一次 }//得到圖片的設置信息 TextureImporterSettings[] originalSets = GatherSettings(texs);//根據我們的需求 設置圖片的一些信息. for (int i = 0; i < texs.Length; i++) { SetupTexture(texs[i], true, TextureImporterFormat.RGBA32); } //最終打成的圖集路徑,包括名字 assetPath = "Assets/Atlas.png"; string outputPath = Application.dataPath + "/../" + assetPath; //主要的打圖集代碼 PackAndOutputSprites(texs, assetPath, outputPath); //打出圖集后在Unity選中它 EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath(assetPath, typeof(Texture))); } //得到圖片的設置信息 static public TextureImporterSettings[] GatherSettings(Texture2D[] texs) { TextureImporterSettings[] sets = new TextureImporterSettings[texs.Length]; for (var i = 0; i < texs.Length; i++) { var tex = texs[i]; var assetPath = AssetDatabase.GetAssetPath(tex); TextureImporter imp = AssetImporter.GetAtPath(assetPath) as TextureImporter; sets[i] = new TextureImporterSettings(imp.isReadable, imp.textureFormat); //如果圖片由包圍盒的話 記錄包圍盒信息 if (imp.textureType == TextureImporterType.Sprite && imp.spriteBorder != Vector4.zero) { var spriteInfo = new SpriteInfo(tex.name, imp.spriteBorder, imp.spritePivot, tex.width, tex.height); spriteList.Add(spriteInfo); } } return sets; } //根據我們的需求 設置圖片的一些信息. static public void SetupTexture(Texture2D tex, bool isReadable, TextureImporterFormat textureFormat) { var assetPath = AssetDatabase.GetAssetPath(tex); TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter; importer.isReadable = isReadable;//圖片是否可讀取它的內存信息 importer.textureFormat = textureFormat;//圖片的格式 importer.mipmapEnabled = false;//是否生成mipmap文件 importer.npotScale = TextureImporterNPOTScale.None;//用于非二次冪紋理的縮放模式 importer.SaveAndReimport();//刷新圖片 }static public void PackAndOutputSprites(Texture2D[] texs, string atlasAssetPath, string outputPath) { Texture2D atlas = new Texture2D(1, 1); Rect[] rs = atlas.PackTextures(texs, (int)padding, (int)matAtlasSize);//添加多個圖片到一個圖集中,返回值是每個圖片在圖集(大圖片)中的U坐標等信息 // 把圖集寫入到磁盤文件,最終在磁盤上會有一個圖片生成,這個圖片包含了很多小圖片 File.WriteAllBytes(outputPath, atlas.EncodeToPNG()); RefreshAsset(atlasAssetPath);//刷新圖片//記錄圖片的名字,只是用于輸出日志用; StringBuilder names = new StringBuilder(); //SpriteMetaData結構可以讓我們編輯圖片的一些信息,想圖片的name,包圍盒border,在圖集中的區域rect等 SpriteMetaData[] sheet = new SpriteMetaData[rs.Length]; for (var i = 0; i < sheet.Length; i++) { SpriteMetaData meta = new SpriteMetaData(); meta.name = texs[i].name; meta.rect = rs[i];//這里的rect記錄的是單個圖片在圖集中的uv坐標值 //因為rect最終需要記錄單個圖片在大圖片圖集中所在的區域rect,所以我們做如下的處理 meta.rect.Set( meta.rect.x * atlas.width, meta.rect.y * atlas.height, meta.rect.width * atlas.width, meta.rect.height * atlas.height ); //如果圖片有包圍盒信息的話 var spriteInfo = GetSpriteMetaData(meta.name); if (spriteInfo != null) { meta.border = spriteInfo.spriteBorder; meta.pivot = spriteInfo.spritePivot; } sheet[i] = meta; //打印日志用 names.Append(meta.name); if (i < sheet.Length - 1) names.Append(","); }//設置圖集的信息 TextureImporter imp = TextureImporter.GetAtPath(atlasAssetPath) as TextureImporter; imp.textureType = TextureImporterType.Sprite;//圖集的類型 imp.textureFormat = TextureImporterFormat.AutomaticCompressed;//圖集的格式 imp.spriteImportMode = SpriteImportMode.Multiple;//Multiple表示我們這個大圖片(圖集)中包含很多小圖片 imp.mipmapEnabled = false;//是否開啟mipmap imp.spritesheet = sheet;//設置圖集中小圖片的信息(每個圖片所在的區域rect等) // 保存并刷新 imp.SaveAndReimport(); spriteList.Clear(); //輸出日志 Debug.Log("Atlas create ok. " + names.ToString()); } //刷新圖片 static public void RefreshAsset(string assetPath) { AssetDatabase.Refresh(); AssetDatabase.ImportAsset(assetPath); } //得到圖片的信息 static public SpriteInfo GetSpriteMetaData(string texName) { for (int i = 0; i < spriteList.Count; i++) { if (spriteList[i].name == texName) { return spriteList[i]; } } //Debug.Log("Can not find texture metadata : " + texName); return null; }}

總結

以上是生活随笔為你收集整理的UGUI打图集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产福利免费观看 | 免费网站在线观看视频 | 欧美视频在线播放 | 色婷婷一区二区 | 夜夜嗨av一区二区三区免费区 | 免费高清视频一区二区三区 | 精品一区二区三区在线视频 | 毛片在线免费观看网址 | 老司机激情影院 | 欧美xxxx胸大 | 亚洲精品国产av | 国产亚洲精品久久久久久打不开 | 欧美激情图区 | 亚洲欧洲视频在线观看 | 黑人巨大精品欧美一区二区 | 欧美日本一区二区 | 91春色| 老妇高潮潮喷到猛进猛出 | 激情午夜网 | 激情小说中文字幕 | 五月婷婷丁香在线 | 视频日韩| 秋霞午夜| 伊人一二三 | 91爱爱视频 | www污污| 另类小说色 | 中文字幕不卡 | 国产精品久久久久久久久免费桃花 | 女生扒开尿口给男生捅 | 国产剧情一区二区三区 | 国产夫妻av | 日韩一级片 | 欧美男女交配视频 | 狠狠操2019| 国产精品国产三级国产aⅴ无密码 | 一区二区三区福利视频 | 91成人午夜 | 久久午夜精品 | 日本久久免费 | av国产片 | 午夜精品久久久久久久蜜桃 | 99热这里只有精 | 久久羞羞 | 中日韩在线 | 免费无码毛片一区二三区 | 成人国产精品蜜柚视频 | 中文字幕一区二区三区久久久 | 欧美精品在线观看一区二区 | 五月天丁香久久 | 91视频在线观看视频 | 俺也去在线视频 | 不用播放器的av网站 | 女生张开腿给男生桶 | 国产视频黄色 | 四虎网站在线播放 | 天堂av网手机版 | 精品动漫一区二区 | 全部免费毛片 | 久久久免费观看视频 | 免费处女在线破视频 | www在线观看免费视频 | 女同动漫免费观看高清完整版在线观看 | 天天操操操操 | 五月婷婷社区 | 99视频免费在线观看 | 99久久久无码国产精品免费麻豆 | 兔费看少妇性l交大片免费 日韩高清不卡 | 日本亚洲黄色 | 日本三级生活片 | 日本美女一级片 | 三上悠亚人妻中文字幕在线 | 日韩av影片在线观看 | 网站在线看 | 777亚洲 | 亚洲18在线看污www麻豆 | 男女操操操 | av无遮挡| av片子在线观看 | 黄色同人网站 | 特黄三级又爽又粗又大 | 国产一区免费在线观看 | 久久人人爽人人爽人人片 | 欧美激情视频一区 | 精品国产一区二区三 | 草逼网站 | 在线亚洲观看 | 在线免费观看日韩视频 | 91亚洲精品久久久蜜桃网站 | 国产性xxxx高清 | 久久久久亚洲av成人毛片韩 | 被黑人猛躁10次高潮视频 | 日韩欧美三级在线 | 一区二区欧美在线 | 阿v天堂在线 | 欧美日韩国产a | 国产精品观看 | √天堂在线 | 久久久久国色av免费观看性色 |