Unity如何使用Spine动画导出的动画
- 介绍
- 使用版本
- Spine导出源文件修改
- Spine3.8.75版本导入Unity的3.8版本Spine的报错
- Unity辅助修改Json中版本号方式
- 总结
介绍
最近公司在做抖音小程序的小游戏,我们这边动画部分使用的是spine动画,所以会有spine导入的问题,这里我正好说一下我目前使用的spine方式和美术导出的格式。
使用版本
这里使用版本也是开始之前必须确定好的事情,因为你如果想要用Unity做抖音小游戏就必须要跟官方的插件控制好版本,我们现在永的是2021.3.14f所以我们也需要配合Spine的版本,Spine我们使用的4.0.64,Unity的插件使用的spine4.0。
Spine下载购买连接
版本要求如下所示 Unity的Spine插件官网以及版本说明
这里可以根据上面图或者连接的要求去选择自己对应的版本。
Spine导出源文件修改
如上图所示这是我们动画导出来的动画文件,这时候我们需要修改一下,需要将后缀.atlas的文件加上一个.txt后缀如下图
Spine3.8.75版本导入Unity的3.8版本Spine的报错
如果遇见上面的这个问题我们看一下版本是否是相近的,如果相近的基本上都可以去修改一下json文件解决。
打开json文件如下所示将3.8.75修改为3.8版本即可
修改完如下即可解决
Unity辅助修改Json中版本号方式
将如下代码放入到Unity中,之后我们在拖动Spine文件到Unity中则会自动将
“spine”:“3.8.75”
修改为
“spine”:“3.8”
using LitJson;
using System;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
public class SpineImportSetting : AssetPostprocessor
{
//任何资源(包括文件夹)导入都会被调用的方法
void OnPreprocessAsset()
{
try
{
if (!this.assetPath.EndsWith(".json"))
return;
//先判断是否是 spine 文件
string msg = File.ReadAllText(this.assetPath, Encoding.UTF8);
JsonData jsonObj = JsonMapper.ToObject(msg);
JsonData item = jsonObj["skeleton"]["spine"];
if (item != null && item.IsString && item.ToString() != "3.8")
{
jsonObj["skeleton"]["spine"] = "3.8";//美术破解的 3.8.75 导入会报错
string newjson = JsonMapper.ToJson(jsonObj);
File.WriteAllText(this.assetPath, newjson);
AssetDatabase.Refresh();
}
}
catch (Exception e)
{
Debug.LogError($"SpineImportSetting 异常 {e.Message}");
}
}
void OnPreprocessTexture()
{
Debug.Log("在纹理导入之前 获取通知");
}
void OnPostprocessTexture()
{
Debug.Log("在纹理导入之后 获取通知");
}
void OnPreprocessModel()
{
Debug.Log("在模型导入之前 获取通知");
}
void OnPostprocessModel()
{
Debug.Log("在模型导入之后 获取通知");
}
void OnPreprocessAudio()
{
Debug.Log("在音频导入之前 获取通知");
}
void OnPostprocessAudio()
{
Debug.Log("在音频导入之后 获取通知");
}
void OnPostprocessAllAssets()
{
Debug.Log("在一些资源被导入后调用(当资源进度条到达末端)");
}
//所有的资源的导入,删除,移动,都会调用此方法,注意,这个方法是static的
public static void OnPostprocessAllAssets(string[] importedAsset, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
foreach (string str in importedAsset)
{
Debug.Log("importedAsset = " + str);
}
foreach (string str in deletedAssets)
{
Debug.Log("deletedAssets = " + str);
}
foreach (string str in movedAssets)
{
Debug.Log("movedAssets = " + str);
}
foreach (string str in movedFromAssetPaths)
{
Debug.Log("movedFromAssetPaths = " + str);
}
}
}
需要LitJson的可以点击获取litjson资源链接
总结
上述是我对从Spine到导入Unity的一些相关的我遇到的点,希望能对大家有帮助,也感谢大家的支持!