Unity实现切割图集工具

本文实例为大家分享了Unity实现切割图集工具的具体代码,供大家参考,具体内容如下

操作步骤

先将脚本拖入Editor

1.选中要切割的图片,texture type 选为default,并勾选Advanced下的read/Write Enabled

2.texture type改为sprite(2D and UI),Sprite mode 选为Multiple,apply一下

3.Sprite Editor 先选其他的切一下,在选第一个切一下,切割成小图,apply

4.选中图集右键,imageslicer,process to Sprites

5.等待切割完成后就可以在同级目录的同名文件夹下使用了

使用时要把小图Type改为sprite(2D and UI),也可以更改名字

脚本如下

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
/// <summary>
/// 切割
/// </summary>
public static class ImageSlicer
{
    [MenuItem("Assets/ImageSlicer/Process to Sprites")]
    static void ProcessToSprite()
    {
        Texture2D image = Selection.activeObject as Texture2D;//获取旋转的对象
        string rootPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(image));//获取路径名称
        string path = rootPath + "/" + image.name + ".PNG";//图片路径名称

        TextureImporter texImp = AssetImporter.GetAtPath(path) as TextureImporter;//获取图片入口

        AssetDatabase.CreateFolder(rootPath, image.name);//创建文件夹

        foreach (SpriteMetaData metaData in texImp.spritesheet)//遍历小图集
        {
            Texture2D myimage = new Texture2D((int)metaData.rect.width, (int)metaData.rect.height);

            //abc_0:(x:2.00, y:400.00, width:103.00, height:112.00)
            for (int y = (int)metaData.rect.y; y < metaData.rect.y + metaData.rect.height; y++)//Y轴像素
            {
                for (int x = (int)metaData.rect.x; x < metaData.rect.x + metaData.rect.width; x++)
                    myimage.SetPixel(x - (int)metaData.rect.x, y - (int)metaData.rect.y, image.GetPixel(x, y));
            }

            //转换纹理到EncodeToPNG兼容格式
            if (myimage.format != TextureFormat.ARGB32 && myimage.format != TextureFormat.RGB24)
            {
                Texture2D newTexture = new Texture2D(myimage.width, myimage.height);
                newTexture.SetPixels(myimage.GetPixels(0), 0);
                myimage = newTexture;
            }
            var pngData = myimage.EncodeToPNG();

            //AssetDatabase.CreateAsset(myimage, rootPath + "/" + image.name + "/" + metaData.name + ".PNG");
            File.WriteAllBytes(rootPath + "/" + image.name + "/" + metaData.name + ".PNG", pngData);
            // 刷新资源窗口界面
            AssetDatabase.Refresh();
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity使用EzySlice实现模型多边形顺序切割

    Unity使用EzySlice实现模型切割,供大家参考,具体内容如下 老规矩,直接上代码: 注意:脚本搭载和需要的材质球以及切割数组填充 EzySlice 多边形顺序切割 using System.Collections; using System.Collections.Generic; using UnityEngine; using EzySlice; public class SplitterModel_ZH : MonoBehaviour { //切割预制体材质 public Mate

  • Unity切割图集转换为多张图片

    本文实例为大家分享了Unity切割图集转换为多张图片的具体代码,供大家参考,具体内容如下 这是网上看来的一个工具,用于Unity中将图集切割为多张的格式后将这些sprite改为一张张图片,就是切割速度太慢,图集中的图片较多的时候还会丢失一部分图片,有时间本人会进一步改善再修改这篇博客. 1.首先选中要切割的图集,texture type 选为default,并勾选Advanced下的read/Write Enabled. 2.texture type改为sprite(2D and UI),Spr

  • Unity3D实现模型随机切割

    本文实例为大家分享了Unity3D实现模型随机切割的具体代码,供大家参考,具体内容如下 模型切割的效果图如下: 我们都知道,模型是由一个个小三角形面组成的,因此我们不妨将问题简化,先实现个小目标,完成单个三角形的切割,甚至继续细分成求一条线段与某个平面的交点. 三角形与切割平面的位置关系主要有以下三种: 1. 三角形与切割平面有两个交点,一个交点在顶点上,一个交点在边上.这时,原有的三角形将被分成两个三角形,分别为013.042. 2. 三角形与切割平面有两个交点,两个交点都在边上.这时,原有的

  • Unity实现切割图集工具

    本文实例为大家分享了Unity实现切割图集工具的具体代码,供大家参考,具体内容如下 操作步骤 先将脚本拖入Editor 1.选中要切割的图片,texture type 选为default,并勾选Advanced下的read/Write Enabled 2.texture type改为sprite(2D and UI),Sprite mode 选为Multiple,apply一下 3.Sprite Editor 先选其他的切一下,在选第一个切一下,切割成小图,apply 4.选中图集右键,imag

  • PHP切割整数工具类似微信红包金额分配的思路详解

    Composer地址:https://packagist.org/packages/werbenhu/php-number-slicing GitHub地址:https://github.com/werbenhu/php-number-slicing 主要代码:NumberSlicing.php 思路:将数字按精度放大倍数,比如切割数字1,切割的份数是10,精度是0.01,则将1放大100 X 10倍,然后再来对加了1000倍权重后的值进行切割.切割完成之后,再将权重去除,保证总值是1. <?p

  • Unity多语言转换工具的实现

    本文实例为大家分享了Unity多语言转换工具的具体代码,供大家参考,具体内容如下 说明 遍历Unity场景和Prefab,提取Text组件文字,并导出Json表.可将Json文本进行多语言翻译后,利用工具将内容替换回原场景或Prefab. 代码 using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEditor

  • unity实现延迟回调工具

    一个实用的计时器,可以计时延迟调用和延迟重复次数调用. 可以自己封装成单例模式挂在GameObject上使用,或者在另一个behavior的Update里执行这个类的OnUpdate()方法再使用. 为了更加安全的使用,建议在销毁MonoBehaviour时清理一下对应的所有计时器. 或者调用时可选择传入回调所在的MonoBehaviour,这样就可以自动清理了. using System.Collections; using System; using System.Collections.G

  • Unity 使用TexturePacker打包图集的操作方法

    目录 Unity TexturePacker 使用方法 Unity 打开Unity Ctrl+9,打开Unity商店,下载TexturePacker Importer插件 这个插件是用来解析图集文件的,是免费的 TexturePacker 打开TexturePacker,右侧是设置栏,一般基础设置就够用了 选择Unity框架: 设置界面右下角,会将文件最终算出的大小告诉你,你可以按照你的需求调整纹理格式 在高级设置界面,有布局选项 博主测试,大小限制,使用任意尺寸,Unity读不出来,比较奇怪,

  • Java实现字符串切割的方法详解

    今天给大家介绍一个小知识点,但是会非常的实用,就是平时我们写Java代码的时候,如果要对字符串进行切割,我们巧妙的运用一些技巧,可以把性能提升5~10倍.下面不说废话,直接来给大家上干货! 工作中常用的split()切割字符串效率高吗? 首先,我们用下面的一段代码,去拼接出来一个用逗号分隔的超长字符串,把从0开始一直到9999的每个数字都用逗号分隔,拼接成一个超长的字符串,以便于我们可以进行实验,代码如下所示: public class StringSplitTest { public stat

  • [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码

    很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化<input type="file">的显示样式,基础的样式实在太难看了. 上传的头像需要进行质量压缩跟大小裁剪,以减缓浏览器的压力. 成果预览: 使用到的技术插件 Jcrop:用于前端"裁剪"图片 bootstrap-fileinput:用于前端优化上传控件样

  • Ubuntu 16.04 主题美化及常用软件安装操作步骤图文解说

    一.主题美化系统清理 系统更新: 安装完系统之后,需要更新一些补丁.Ctrl+Alt+T调出终端,执行一下代码: sudo apt-get update sudo apt-get upgrade 卸载libreOffice: libreOffice是ubuntu自带的开源office软件,我们一般习惯用WPS,在第二部分会说明WPS在Ubuntu中的安装 sudo apt-get remove libreoffice-common 卸载不常用软件: sudo apt-get remove thu

  • UnityWebRequest前后端交互实现过程解析

    一.技术概述 1.描述这个技术是做什么? 是Unity一套网络工具库,用于进行Http请求 2.学习该技术的原因? 项目需要,防止使用C#原生的网络库,加快开发速度 3.技术的难点在哪里 Unity仅提供了基础的功能,如何把这些功能构造成一个能够稳定业务开发的流程是一个比较难处理的问题 二.技术详情 描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述. HttpCenter类:封装Get.Post.Put.Delete,维护一个请求队列 ///Get方法例举 private IEnum

随机推荐