原文作者: Alex Belzer
原文地址:http://gamasutra.com/blogs/AlexBelzer/20180319/315600/Working_with_Pixel_Art_Sprites_in_Unity_Importing_Assets.php
前言
欢迎来到我的系列博客,在这里,我将展示我是如何尽可能只用最基本的Unity编辑器做到在unity内导入、制作动画并且放置这些2D精灵素材。我已经学会了如何在实际制作游戏的过程中导航Unity的API,我相信自己的这些在黑暗中长期摸索出来的经验对其他开发者来说是有帮助的。
在我们开始制作动画之前,我们需要准备被动画化的素材。即使只是把素材导入到unity里,也要比你想象中的要复杂得多。(译注:该作者的教程目前只出了两部分,此为第一部分的内容)
第一部分 2D像素游戏素材的导入
unity本来不是做2d游戏的。尤其是2D像素精灵或者棋盘类的2D游戏。光是导入并分割精灵组就够你喝一壶的了,尤其是导入那些来自更专业的2D框架中的素材。想象一下每次导入精灵组时你都得手动改一大堆属性,分割精灵也只能手动分割每一帧。想要输几个参数就自动分割?不存在的。而Unity会告诉你:不用想象,这些麻烦都是它的基本操作。
因此,我极度需要一个解决方案让我从这些琐碎事务中脱身,这个救世主就是编辑器脚本了。编辑器脚本可以和特定的Unity功能相关联,每当这些功能被执行时脚本也会自动执行,而要写一个编辑器脚本,首先在项目的“Assets”文件夹下的某个位置建立一个叫“Editor”的文件夹,然后在其中创建一个新脚本。
与其如下图那样每次都手动编辑每一个属性:
不如像下图这个用代码来解决问题,只需一次:
现在我就用不着手动把每个精灵的filterMode改成Point了!(FilterMode.Point可以使材质保持锐利,对于像素美术而言很合适。Unity假定你是在为大型3D游戏导入大型材质,这种情况下双线性/三线性过滤器更好一点。不过,这些属性在不同的项目中可能会发生变化,所以我贴在这里的代码不是任何时候都适用的。
下一步,我们将使用OnPostprocessTexture()方法。(这里语义不是特别清楚可能翻译错了) 我们对材质进行迭代切割,然后把这些切片存储在asset的metadata中的一个数组里(对细节感兴趣的话可以到github上看源代码)。 问题在于如何确定精灵要切成多大的尺寸,以及更重要的是,判断我导入的哪些素材才是精灵。我可不想每次导入一个精灵时就弹一个窗口要我输入这些属性(那样的话这个练习就完全没有意义了)。最终我弄了一个自动的解决方案。只需要在Resources目录下创建一个以整数命名的文件夹,比如“16”,把你的素材拖到这个文件夹里面,编辑器脚本就会假设你想要把这些素材切成16×16像素的精灵组。
看看这些漂亮的被分割好的素材:
一般情况下我不太放心自动解决方案,因此我决定加一个小小的弹窗告诉用户精灵已经切割好了,好让他们不至于一脸懵逼。
本节内容到此为止,如果你觉得可能用的上这个脚本,可以随意从GitHub上下载它。下一篇文章中,我会分享一些在脚本中而非在Unity编辑器中定义和播放精灵的经验,下次见!