Unity如何使用Spine动画导出的动画

介绍

最近公司在做抖音小程序的小游戏,我们这边动画部分使用的是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的一些相关的我遇到的点,希望能对大家有帮助,也感谢大家的支持!

猜你喜欢

转载自blog.csdn.net/qq_42194657/article/details/141195767