Unity的2D图集处理,并切割出一张张小图片

2023-11-13

(转载请注明出处:http://blog.csdn.net/hongyouwei/article/details/45011315)

在我们找资源的时候,有时候会遇到那种把一堆图片放进一张png图片里面的情况,在做2D游戏的时候,我们往往需要将里面的一块块小图片切割出来使用,那么问题就来了,怎么切割呢,现在我们提供一张小图片(注意了,一般Unity里面要求的图片宽高最好是4的整数倍比如128*128),给大家演示一下:

那么我们现在把图片导入到Unity中,选中图片你会看到上边的Inspector界面

然后,选择Texture Type类型为Advanced,如下图:



将Read/Write Enabled选上,然后Sprite Mode选择Multiple,如上图。然后点击Sprite Editor,进入图形剪切界面:


点击左上角的Slice,在上面右图中我这里Type选择Grid,你也可以选择Automatic因为我要得到三个网格,所以我这里的像素是X:150  Y:200,其它不管,直接点击Slice,进入以下界面,然后选中每一个网格,进行调整,让其刚好与其边界搭边,如下图:



然后点击上面菜条的Apply,即可获得一个剪切过的图集。现在这个图集,已经可以直接拖出来使用了,但是如果想快速得到里面一张张的图片呢,接下来给大家介绍一个简单的编辑器扩展,这是我在不经意间,在贴吧里面看到有人使用,拿出来和大家一起分享。

首先,在Unity的Project窗口下的Assets里面创建一个文件夹名字叫Editor,然后在里面创建一个脚本,名字随便,我这里取名为: ImageSlicer,接下来就是打开脚本进行编码了,这里我直接贴上代码,然后大家就可以在选中图片后,进入Assets目录下,选择ImageSlider/Process to Sprites,然后就能得到一个文件夹,里面放有一张张的小图片,现在贴上代码和剪切结果图片:

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;

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();
		}
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity的2D图集处理,并切割出一张张小图片 的相关文章

  • Unity3D C#数学系列之点积

    文章目录 1 定义 2 几何意义 3 向量a 向量b xaxb yayb zazb 4 应用案例 4 1 求两向量的夹角 4 2 判断两向量是否垂直 4 3 判断NPC是否在攻击范围内 4 4 已知入射光线和表面法线求反射光线 5 项目 1
  • unity 五种旋转方式localEulerAngles、eulerAngles、rotation、localRotation和Rotate的区别

    1 1 transform localEulerAngles 使用localEulerAngles进行旋转的时候 我们要使用transform localEulerAngles new Vector3 x y z 其中 new Vector
  • VS2017调试unity没有解决方案

    1 VS2017之前的版本调试unity 需要下载 Visual Studio Tools for Unity 2 VS2017内置了Visual Studio Tools for Unity 3 首先打开 帮助 gt 关于 已安装程序中查
  • Unity3d中使用OnGUI()函数判断“键盘按下抬起”功能的新方法。

    private bool flagJudgeDownAllow true 开始值为true void OnGUI key Event current FunctionKeyCodeV1 key private void FunctionKe
  • 服务器时间管理器

    时间戳管理器 using System using UnityEngine public class SyncTime Singleton
  • 《Unity Shader入门精要》彩图版免费分享~~~~~

    这书很多地方都要币或者要钱 这里就免费分享了 下面是网盘链接 顺手点个赞或者评论一波呗 下载链接 链接 https pan baidu com s 137Y1nkB6h8HIvKOfwFPnbQ 提取码 f8dw 顺手点个赞 蟹蟹蟹蟹
  • 关于unity3的中关于创建方法的总结

    关于创建基本物体 有些情况会使用上 物体碰撞 游戏里怪物和英雄的触发事件上 创建一个简单物体 隐藏mesh可以作为简单的触法器使用 多次创建预制体Prefab 方法Instantiate original Object position V
  • 离散仿真引擎基础作业与练习

    作业内容 一 简答题 1 解释 GameObjects 和 Assets 的区别与联系 2 下载几个游戏案例 分别总结资源 对象组织的结构 3 使用 debug 验证 MonoBehaviour 基本行为或事件触发条件 4 了解 GameO
  • Unity编辑器界面概述

    了解界面 如果您对编辑器界面没有非常地了解 那么请花一些时间查看并熟悉 Editor 编辑器 界面 Editor 主窗口由选项卡式窗口组成 这些窗口可重新排列 因此 Editor 的外观可能因项目或者开发者而异 具体取决于个人偏好 Wind
  • HLSL 偏导数 ddx / ddy

    HLSL ddx ddy 在光栅化的时刻 GPUs会在同一时刻并行运行很多Fragment Shader 但是并不是一个pixel一个pixel去执行的 而是将其组织在2x2的一组pixels分块中 去并行执行 偏导数就正好是计算的这一块像
  • Unity笔记:修改代码执行的默认打开方式

    使用 External Tools 偏好设置可设置用于编写脚本 处理图像和进行源代码控制的外部应用程序 External Script Editor 选择 Unity 应使用哪个应用程序来打开脚本文件 Unity 会自动将正确的参数传递给内
  • Unity编辑器扩展——进度条显示通用方法

    在我们使用Unity编辑器扩展做一些批处理的工具时 通常会需要显示一个进度条 这样不会让Unity一直卡住不动 使得使用者不知道当前的进展 那么如何显示进度条呢 涉及的相关API有 EditorUtility ClearProgressBa
  • Unity 导出XCode工程运行报错: ‘UnityFramework/UnityFramework.h‘ file not found

    简介 近期项目升级到2019 4 10f1版本 在用自动化打包的时候 遇到了一些问题 其中一个是 在导出XCode工程之后 运行工程的时候 编译报错 UnityFramework UnityFramework h file not foun
  • Unity 音频卡顿 静帧 等待等问题的解决方案

    是否遇到过在Unity中加载音频文件卡顿 也就是画面卡住 的现象 特别是加载外部音频文件时 虽然时间很短 但这终归不是什么好现象 尤其是打游戏的话 影响很大 但是一些有牌面的Boss也不能不配音乐 当然也可以通过其它方式解决 比如特定条件统
  • Unity使用Newtonsoft报错的解决方案

    文章目录 Unity 使用 Newtonsoft 报错的解决方案 问题描述 解决方法 方法一 使用 Unity 的 Package Manager 自动导入 方法二 访问 GitHub 下载 unitypackage 文件手动导入 Unit
  • Unity_如何使相机视角一直跟随角色移动

    实例代码如下 using System Collections using System Collections Generic using UnityEngine 相机视角跟踪 public class FollowTarget Mono
  • Unity3D Engine Architecture

    原文 http www umingo de doku php id paper mechs and tanks section03 Architecture To better understand the game s software
  • Unity3D如何修改Button显示的文字以及深入了解Button组件

    在创建了一个Button后 结构如图 先仔细观察一下Button的Inspector视图 发现其中竟然有一个叫Button的脚本组件 新建脚本 代码如下 并将该脚本绑定给Canvas组件 using UnityEngine UI using
  • 对Unity3D 静态批处理和动态批处理的理解

    Draw Call就是CPU调用图像编程接口 像OpenGL或者 DirectX 简单来说 Draw Call就是由CPU发起的一个命令 添加到一个命令缓冲区 当GPU完成了上一次的渲染任务之后 会从命令缓冲区的命令队列中再取出一个并执行
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制

随机推荐

  • 目标检测原理群100问

    qq群号 703346870 简述yolo的多尺度变换 怎样理解残差网络可以自行选择冗余层 https baijiahao baidu com s id 1609100487339160987 梯度下降的数学原理 怎样理解包围框回归 使用g
  • 后台dom拼接xml,动态显示统计图

    1 这个东西让我好生头疼 贴代码吧 2 3 两秒后模拟点击 4 setTimeout function 5 IE 6 if document all 7 document getElementById userQuery click 8 其
  • MATLAB 更改或隐藏热图(heatmap)的坐标轴刻度

    在热图中 坐标轴标签用 data表示 更改坐标轴标签 figure my matrix rand 3 heatmap my matrix Colormap parula 3 ColorbarVisible on XLabel Time YL
  • FreeRTOS-创建删除任务

    1 FreeRTOSConfig h文件 FreeRTOSConfig h配置文件作用 对FreeRTOS进行功能配置和裁剪 以及API函数的使能 相关的宏可以分为三大类 INCLUDE 配置FreeRTOS中可选的API函数 config
  • 比较器的设计

    一 1位比较器 1位比较器原理 1位比较 Xi Yi XY的第i位 大于Great Li1 Xi Yi 小于Less Li2 Xi Yi 等于Equal Li3 Xi Yi 同或 异或非 Lij 第1个下标表示位数 第2个下标表示大小关系1
  • sql语句中case when和as用法

    在sql语句里case when then else end可以当做c语言中switch case一样是分支语句 起到不同条件处理作用 而as相当于一个别名 可以给某个列或者某个表起新的名字 比如这里有个employee表 select f
  • R语言重命名数据框列名:使用plyr包的rename函数

    R语言重命名数据框列名 使用plyr包的rename函数 在R语言中 我们经常需要对数据框 data frame 的列名进行修改 修改列名可以使得数据更易读和理解 同时也有助于数据分析和可视化过程中的操作 在本文中 我们将介绍如何使用ply
  • C++基础知识 - map和multimap容器

    map multimap的简介 map是标准的关联式容器 一个map里存储的元素是一个键值对序列 叫做 key value 键值对 它提供基于key快速检索数据的能力 map中key值是唯一的 集合中的元素按一定的顺序排列 元素插入过程是按
  • python爬虫五:beautifulsoup4的安装使用

    1 bs4简介 概念 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的网页信息提取库 安装 先安装它的依赖模块 lxml 再安装 bs4 pip install lxml gt pip install bs4 最基
  • 32万记录导入MSSQL,只需12.52秒,足足快了200多倍,省了一个小时干啥不好吗?

    现在云时代 大家都用上云了 现在云的带宽5M都觉得很大了 但是有大量的数据需要处理的话 按照传统的方式 上传一个32万记录的DBF 起码也得一个小时 而现在有款工具 来自ZHZ 可以节省你200多倍的时间 香不香 测试环境 win7 32位
  • Android Rxjava:最简单易懂的诠释 看这篇

    1 前言 Rxjava 具有链式调用 使用简单 事件与结果松耦合的特点 Rxjava 之所以深受欢迎它包含 非常多操作符 能通过 链式形 优雅整洁的代码几乎能实现所有的功能需求 本文特点 图多字少 逻辑简单 之前面试中被问了很多Rxjava
  • 激活函数(sigmoid、tanh、ReLU、softmax)

    文章目录 1 1 sigmoid函数 1 2 tanh函数 1 3 ReLU函数 1 4 softmax函数 激活函数在神经网络中的作用有很多 主要作用是给神经网络提供非线性建模能力 如果没有激活函数 那么再多层的神经网络也只能处理线性可分
  • 在阿里工作的日子里,我都学到了哪些东西?

    来阿里也有段时间了 这段时间学了很多东西 简单说起来 就是一个走出舒适区的过程 从一开始的新手入门 到逐渐熟悉业务和技术 再到慢慢的适应环境 胜任工作 总体来说 这几个月还是学到了很多东西 感觉成长的很快 但同时工作的压力也非常的大 总体来
  • 【翻译 + 整理】Qt样式表详解(2):属性——背景相关属性

    1 alternate background color 交替背景色 用于QAbstractItemView的子类 QColumnView QHeaderView QListView QTableView QTreeView 使用的前提是开
  • Zabbix监控部署项目

    为什么选择Zabbix Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 zabbix 能监视各种网络参数 保证服务器系统的安全运营 并提供灵活的通知机制以让系统管理员快速定位 解决存在的各种
  • Springboot配置端口号

    springboot项目端口配置可以通过application yml或application properties指定 server port 80 或者 server port 8089 代码指定 springboot2 x以上版本Em
  • 关于AI自动写作的资料

    AI 自动写作 产品调研 第一种是AI新闻时事类写作 核心场景是在内容平台通过人 机混编的方式 机器帮助编辑 内容创作者 减少重复劳动 提高生产效率 主要调研了今日头条的xiaomingbot 腾讯的Dreamwriter 百度的writi
  • iOS架构师_消息转发机制

    1 动态方法解析 对象在收到无法处理的消息时 会调用下面的方法 前者是调用类方法时会调用 后者是调用对象方法时会调用 未实现类方法调用 BOOL resolveClassMethod SEL sel 未实现实例方法调用 BOOL resol
  • osg学习(七十)如何根据视口对象自动调整视点位置、距离

    osgGA CameraManipulator cpp void CameraManipulator computeHomePosition const osg Camera camera bool useBoundingBox doubl
  • Unity的2D图集处理,并切割出一张张小图片

    转载请注明出处 http blog csdn net hongyouwei article details 45011315 在我们找资源的时候 有时候会遇到那种把一堆图片放进一张png图片里面的情况 在做2D游戏的时候 我们往往需要将里面