-
Notifications
You must be signed in to change notification settings - Fork 89
Standing Import
woctordho edited this page Jul 19, 2021
·
22 revisions
- Nova的一幅立绘由许多部件组合而成,建议画师把每个角色作为一个PSD文件,每个部件画在一个图层上
- TODO:按理说我们应该支持GIMP,各位小伙伴有空的话可以写一下GIMP导出图层的脚本
- 用
Tools/Standings/export_psd_layers.py导出图层,这时生成的部件周围会有大量透明区域,需要裁剪 - 把所有部件放到
Assets/StandingsUncropped/<角色名称>/文件夹下 - 在Unity Editor的Project中选中所有部件,在Inspector中设置导入格式:
-
Texture Type:Sprite (2D and UI) -
Sprite Mode:Single -
Sprite Mode -> Pixels Per Unit:保持默认值100 -
Advanced -> Read/Write Enabled:true -
Advanced -> Generate Mip Maps:false -
Max Size:需要大于原图的尺寸- TODO:目前Unity支持的
Max Size最大是16384,如果原图还要大,我们得想别的办法
- TODO:目前Unity支持的
-
Compression:None(否则会影响裁剪后图片的质量)
-
- 在Project中选中所有部件,右键点击任意部件,选择
Create -> Nova -> Uncropped Standing,文件夹下会生成UncroppedStanding.prefab - 双击打开这个prefab
- 在Inspector中,不选
Use Capture Box,点击Auto Crop All,就会计算每个部件的裁剪框- TODO:如果没有打开prefab,就点击
Auto Crop All,似乎会出问题
- TODO:如果没有打开prefab,就点击
- 在Hierarchy中选中各个
StandingComponent,在Inspector中检查黄色的裁剪框是否合适- 如果不合适,可以手动修改
Crop Rect - 也可以调节
Auto Crop Padding和Auto Crop Alpha,再点击Auto Crop重新自动裁剪
- 如果不合适,可以手动修改
- 在Hierarchy中选中
UncroppedStanding,在Inspector中将Output Directory设为Assets/Resources/<作品名称>/Standings/<角色名称> - 点击
Write Cropped Textures,就会把裁剪后的部件保存到这个文件夹- 如果文件夹不存在,会自动创建
- 点击
Generate Metadata,就会在这个文件夹下生成一些asset,记录裁剪后的部件在原图中的偏移量 - 在Project中选中所有裁剪后的部件,在Inspector中设置导入格式:(TODO:自动完成这一步)
-
Texture Type:Sprite (2D and UI) -
Sprite Mode:Single -
Sprite Mode -> Pixels Per Unit:保持默认值100 -
Max Size:需要大于部件的尺寸- 如果这里提示
Only textures with width/height being multiple of 4 can be compressed...,一般是因为这里的Max Size或者裁剪前的Max Size不够大
- 如果这里提示
-
Compression:设置合适的压缩格式
-
- 在Unity Editor的Hierarchy中的
Characters下找到示例角色的game object(如Ergong),把它复制一份 - 将game object的名字改成你的角色的名字(如
Xiaoming),这个名字不会用在脚本中,只是为了在Hierarchy中好看 - 在Inspector中的
Character Controllercomponent中:- 将
Lua Global Name改成你的角色的名字(如xiaoming),脚本中使用的都是这个名字,注意大小写 - 将
Image Folder和Voice Folder改成对应的文件夹
- 将
- 打开
Assets/Nova/Lua/pose.lua,在pose表中为角色定义一些pose,定义时靠右的部件在显示时靠上层,如:
['xiaoming'] = {
['normal'] = {'body', 'mouth_normal', 'eye_normal'},
},- 在脚本中加入显示立绘的代码,如
show(xiaoming, 'normal')
- 在裁剪前和裁剪后,需要检查每个部件的
Max Size是否小于图片的实际尺寸,如果小了,就要增大Max Size- 否则,Unity会自动把图片缩小,裁剪功能会出问题(TODO:支持在自动缩小之后裁剪)
- 在
Characters/SpriteMergergame object的Sprite Mergercomponent中:-
Reference Size是用于合成立绘的render texture尺寸- 建议设为power of 2,也许有性能提升
- 你可以把render texture想象成一张画布,合成立绘的过程就是把部件放到画布上面,而画布的大小是有限的
-
Pixels Per Unit越大,合成后的立绘在render texture中就会越大,太小的值会浪费render texture空间,太大的值会超出render texture边界- 比如原图的尺寸是2400像素,裁剪后部件sprite的
Pixels Per Unit是100,render texture的尺寸是2048像素,SpriteMerger的Pixels Per Unit就应该设为100 / 2400 * 2048 ≈ 85 - 如果
SpriteMerger的Pixels Per Unit是50,合成后的立绘尺寸就只有2400 / 100 * 50 = 1200,render texture上的很多空间都浪费了 - 如果
SpriteMerger的Pixels Per Unit是200,合成后的立绘尺寸就达到2400 / 100 * 200 = 4800,超出render texture的边界 - 一般所有角色可以共用一个
SpriteMerger,如果确实难以统一尺寸,也可以创建多个
- 比如原图的尺寸是2400像素,裁剪后部件sprite的
-
- 在每个角色的game object的
Game Overlay Texture Changercomponent中,可以设置一个Actual Image Object,然后用这个game object的transform来调节立绘的位置偏移量和大小- 如果对一个角色的整套立绘进行大幅度改动,可以在这里调节位置偏移量和大小,而不用改动脚本,也不会影响其他角色