Spine的使用

今天在给项目准备资源的时候,导入Spine出现了问题

从警告上来说是材质丢失了,查看生成的material文件,发现上面的纹理是空的,但是spine需要的图片是在的,点开图片发现导入的时候默认的 TextureType是默认类型

将其类型改成sprite

重新设置材质的纹理

重新设置atlas文件的材质,至此,警告已经消除了

问题虽然解决了,但是如果之后每次导入spine时都要执行一次这个操作,这显然耗时又废力,好在Unity 提供了 AssetPostProcessor 这个接口,它允许开发者挂接到导入管线并在导入资源的前后运行脚本。可用于项目中强制执行某些最低标准。每次导入资源或者资源的导入设置发生更改时将回调此类。
参考链接AssetPostprocessor
在工程\Unity\Asset\Editor目录下新建一个类ImageImporter,这个类的作用是当导入资源是纹理的时候,将其纹理类型改成Sprite

1
2
3
4
5
6
7
8
9
public class ImageImporter: AssetPostprocessor
{
void OnPreprocessTexture()
{
TextureImporter textureImporter = (TextureImporter)assetImporter;
textureImporter.textureType = TextureImporterType.Sprite;
}

}

修改后拖进一个新的spine文件,此时能正常生成材质
另外再导入Spine资源时还会报一个警告, 查了下资料说是需要在xxx.atlas后面添加后缀.txt以及xxx.skel文件后面添加后缀.bytes,所以需要在这个函数下添加处理这两个后缀的代码

警告如下
If this file is a Spine atlas, please change its extension to .atlas.txt. This is to allow Unity to recognize it and avoid filename collisions. You can also set this file extension when exporting from the Spine editor.

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void OnPreprocessAsset()
{
var strSpinePath = "/Res/Spine/";

// 因为spine文件打算都放这里 所以只检测这里的文件
if (assetPath.Contains(strSpinePath))
{
if (assetPath.EndsWith(".atlas"))
{
var srt = System.IO.Path.ChangeExtension(assetPath, ".atlas.txt");
File.Move(assetPath, srt);
UnityEngine.Debug.Log($"成功导入Spine atlas文件 {srt}");
}
else if (assetPath.EndsWith(".skel"))
{
var srt = System.IO.Path.ChangeExtension(assetPath, ".skel.bytes");
File.Move(assetPath, srt);
UnityEngine.Debug.Log($"成功导入Spine skel文件 {srt}");
}
}
}

至此,已经能成功批量导入正确的spine文件了!

这个接口还提供了很多功能,后续如果有类型的问题的时候再继续研究和使用


Spine的使用
http://example.com/2023/04/05/Spine的使用/
Author
John Doe
Posted on
April 5, 2023
Licensed under