UGUI学习——Sprite Pack
来源:互联网 发布:杭州电魂网络 编辑:程序博客网 时间:2024/05/16 15:25
自定义Sprite Pack (图片打包),相当于NGUI的Atlas。
感谢雨松大大、、
将此脚本放在Editor文件夹下。
using System;using System.Linq;using UnityEngine;using UnityEditor;using UnityEditor.Sprites;using System.Collections.Generic;// DefaultPackerPolicy will pack rectangles no matter what Sprite mesh type is unless their packing tag contains "[TIGHT]".class DefaultPackerPolicySample : UnityEditor.Sprites.IPackerPolicy{protected class Entry{public Sprite sprite;public AtlasSettings settings;public string atlasName;public SpritePackingMode packingMode;}public virtual int GetVersion() { return 1; }protected virtual string TagPrefix { get { return "[TIGHT]"; } }protected virtual bool AllowTightWhenTagged { get { return true; } }public void OnGroupAtlases(BuildTarget target, PackerJob job, int[] textureImporterInstanceIDs){List<Entry> entries = new List<Entry>();foreach (int instanceID in textureImporterInstanceIDs){TextureImporter ti = EditorUtility.InstanceIDToObject(instanceID) as TextureImporter;TextureImportInstructions ins = new TextureImportInstructions();ti.ReadTextureImportInstructions(ins, target);TextureImporterSettings tis = new TextureImporterSettings();ti.ReadTextureSettings(tis);Sprite[] sprites = AssetDatabase.LoadAllAssetRepresentationsAtPath(ti.assetPath).Select(x => x as Sprite).Where(x => x != null).ToArray();foreach (Sprite sprite in sprites){ //在这里设置每个图集的参数Entry entry = new Entry();entry.sprite = sprite;entry.settings.format = ins.desiredFormat;entry.settings.usageMode = ins.usageMode;entry.settings.colorSpace = ins.colorSpace;entry.settings.compressionQuality = ins.compressionQuality;entry.settings.filterMode = Enum.IsDefined(typeof(FilterMode), ti.filterMode) ? ti.filterMode : FilterMode.Bilinear;entry.settings.maxWidth = 1024;entry.settings.maxHeight = 1024;entry.atlasName = ParseAtlasName(ti.spritePackingTag);entry.packingMode = GetPackingMode(ti.spritePackingTag, tis.spriteMeshType);entries.Add(entry);}Resources.UnloadAsset(ti);}// First split sprites into groups based on atlas namevar atlasGroups =from e in entriesgroup e by e.atlasName;foreach (var atlasGroup in atlasGroups){int page = 0;// Then split those groups into smaller groups based on texture settingsvar settingsGroups =from t in atlasGroupgroup t by t.settings;foreach (var settingsGroup in settingsGroups){string atlasName = atlasGroup.Key;if (settingsGroups.Count() > 1)atlasName += string.Format(" (Group {0})", page);job.AddAtlas(atlasName, settingsGroup.Key);foreach (Entry entry in settingsGroup){job.AssignToAtlas(atlasName, entry.sprite, entry.packingMode, SpritePackingRotation.None);}++page;}}}protected bool IsTagPrefixed(string packingTag){packingTag = packingTag.Trim();if (packingTag.Length < TagPrefix.Length)return false;return (packingTag.Substring(0, TagPrefix.Length) == TagPrefix);}private string ParseAtlasName(string packingTag){string name = packingTag.Trim();if (IsTagPrefixed(name))name = name.Substring(TagPrefix.Length).Trim();return (name.Length == 0) ? "(unnamed)" : name;}private SpritePackingMode GetPackingMode(string packingTag, SpriteMeshType meshType){if (meshType == SpriteMeshType.Tight)if (IsTagPrefixed(packingTag) == AllowTightWhenTagged)return SpritePackingMode.Tight;return SpritePackingMode.Rectangle;}}
0 0
- UGUI学习——Sprite Pack
- Unity2D——如何使Sprite显示在UGUI前面
- ugui Sprite更换图片
- UGUI研究之Sprite
- ugui sprite替换方法
- UGUI 动态切换Sprite
- UGUI学习——Canvas
- UGUI学习——EventSystem
- Unity - UGUI - Sprite 如何打包
- UGUI学习——小知识点
- UGUI学习笔记1——Canvas
- Sprite Kit — Scenes
- Cocos2d-x学习笔记《08》——精灵类Sprite
- extjs学习——sprite.Text获取数据并绘图
- Direct3D学习笔记(二)——精灵动画(Sprite)
- 【ugui的坑】实现可拖拽的Sprite
- UGUI -- 原生Sprite 处理小扩展
- UGUI中动态改变image的sprite
- nopcommerce 电商商城 ASP.NET 开源系统
- Cloudera Manager5之安装部署CDH5.X
- 《从0到1》笔记 第九章 基础决定命运
- java笔记
- 美团面试的两道算法题
- UGUI学习——Sprite Pack
- unity3d中平滑跟随的功能实现!!!!
- c++ 代理类 copy clone
- 堆(heap)和栈(stack)简单介绍
- 蔡勒公式的使用
- How to upgrade nodejs
- 唉!!!!!!!!!!!!!!
- linux shell中shift的用法
- ios-day18-03(CALayer的两个属性position和anchorPoint(锚点))