Manejo de problemas de compatibilidad con versiones anteriores de Spine

Conocimiento relacionado con la versión

Primero mira las cosas relacionadas con la versión de Spine. Una es la versión de software de Spine, la otra es la versión de ingeniería de Spine (.spine), la otra es la versión de archivo exportada por Spine (.atlas png bytes/json), y la última es la versión de tiempo de ejecución de Spine utilizada por Unity. El software es retrocompatible con el proyecto Spine, y los otros son básicamente incompatibles. Se requiere la misma versión para el uso normal. Donde el tiempo de ejecución es un proyecto de código abierto, aquí está la dirección del proyecto git

La versión del software Spine se puede seleccionar al inicio, como se muestra en la siguiente figura

Una versión superior del software Spine puede abrir una versión inferior del archivo del proyecto (el software 4.0 abre un proyecto 3.6), pero tenga en cuenta que si lo guarda después de la modificación, hará que el archivo del proyecto se actualice a una versión superior, haciéndolo imposible de retroceder. Por lo tanto, al realizar esta operación, se recomienda hacer primero una copia de seguridad del proyecto de la versión anterior.

El software Spine de versión alta puede exportar archivos de exportación de versión baja, y puede seleccionar la versión al exportar, pero habrá algunos problemas de compatibilidad y pérdida de información.

El software Spine no puede importar archivos de exportación de versiones anteriores. Los archivos de exportación de Spine y las versiones de SpineRuntime tienen una correspondencia uno a uno. Si los archivos de animación de Spine exportados no son consistentes con la versión de Runtime, pueden ocurrir problemas de incompatibilidad. Y SpineRuntime y Unity también tienen cierta correspondencia. La siguiente figura es la relación correspondiente que se muestra en el sitio web oficial a partir del 24 de enero de 2022. Si hay algún cambio, puede hacer clic para ver la información en el sitio web oficial

Versión de tiempo de ejecución de Spine

Versiones de Unity admitidas

columna-unidad 4.0.00+

Unidad 2017.1-2021.1

columna-unidad 3.8

Unidad 2017.1-2020.3

columna-unidad 3.7

Unidad 5.6-2018.4

columna-unidad 3.6

Unidad 5.6-2018.2

columna-unidad 3.5

Unidad 5.4-2017.1

columna-unidad 3.0

Unidad 4.6

Pasos de degradación

Entorno operativo: la versión objetivo de Unity es 2020, el tiempo de ejecución de spine 3.6, el proyecto y el software de spine son ambos 4.0

1. Exportar archivos de animación de la columna vertebral

Abra el proyecto, seleccione la versión 3.6 al exportar el archivo y genere el archivo .atlas.txt .png .json

Los archivos generados son los siguientes

Aquí hay un problema al que prestar atención. Es necesario modificar el campo de la versión del lomo del archivo exportado. Aunque la versión seleccionada es la 3.6, al exportar, el campo de la versión se muestra como "lomo": "3.7-de-3.8- from-4.0.58". Cambie el campo de la versión del lomo a 3.6

antes de arreglar:

{

"skeleton": { "hash": "/iWACBJx9C0", "spine": "3.7-from-3.8-from-4.0.58", "x": -1075.55, "y": -637.13, "width": 2041.4, "height": 1498.37 }

}

Después de la modificación:

{

"skeleton": { "hash": "/iWACBJx9C0", "spine": "3.6", "x": -1075.55, "y": -637.13, "width": 2041.4, "height": 1498.37 }

}

2. Generar material y archivos .asset

Aquí, si el archivo .atlas.txt .png .json generado se importa directamente al proyecto unity 2020, el archivo SkeletonData.asset no se puede generar correctamente. Entonces necesitas usar una versión más baja de la unidad.

Entonces, primero arrastre el archivo de exportación al proyecto Unity 2019 que se ha agregado al tiempo de ejecución de Spine 3.6 y genere el archivo .asset y el material correctamente.

3. Importe el archivo de exportación del lomo y el material generado y los archivos .asset

En unity2019, seleccione el archivo de exportación y el material generado y el archivo .asset, etc., exporte el recurso al archivo .unitypackage y finalmente regrese al proyecto unity 2020 y luego importe el archivo .unitypackage. La animación se puede utilizar normalmente. (Tenga en cuenta que si arrastra el archivo directamente aquí, también cometerá un error si lo arrastra directamente al proyecto 2020)

Problemas causados ​​por degradar la versión

1. Pérdida de información de la curva

Use el software spine 4.0 para exportar animaciones con atributos de curva en las versiones 3.6 y 4.0 respectivamente

La siguiente es la versión 4.0, puede ver que la información de la "curva" se exporta normalmente

"zhuzi4": {
        "translate": [
          {
            "time": 0.125,
            "x": -84.08,
            "y": -10.78,
            "curve": [
              0.307, -74.64, 0.477, -67.23, 0.307, -10.78, 0.477, -10.78
            ]
          },
          {
            "time": 0.625,
            "x": -62.73,
            "y": -10.78,
            "curve": [
              1.055, -51.65, 1.457, -43.65, 1.055, -10.78, 1.457, -10.78
            ]
          },
          {
            "time": 1.825,
            "x": -39.13,
            "y": -10.78,
            "curve": [
              1.884, -38.39, 1.942, -37.72, 1.884, -10.78, 1.942, -10.78
            ]
          },
          { "time": 2, "x": -37.15, "y": -10.78 }
        ],
        "scale": [
          { "x": 0.5, "y": 0.5, "curve": "stepped" },
          { "time": 0.125, "x": 0.5, "y": 0.5 },
          { "time": 0.3, "x": 1.04, "y": 1.04, "curve": "stepped" },
          { "time": 1.825, "x": 1.04, "y": 1.04 }
        ]
      }

La siguiente es la versión 3.6, puede ver que se pierde toda la información de la curva de traducir.

"zhuzi4": {
          "translate": [
            { "time": 0.125, "x": -84.08, "y": -10.78 },
            { "time": 0.625, "x": -62.73, "y": -10.78 },
            { "time": 1.825, "x": -39.13, "y": -10.78 },
            { "time": 2, "x": -37.15, "y": -10.78 }
          ],
          "scale": [
            { "x": 0.5, "y": 0.5, "curve": "stepped", "time": 0.0 },
            { "time": 0.125, "x": 0.5, "y": 0.5 },
            { "time": 0.3, "x": 1.04, "y": 1.04, "curve": "stepped" },
            { "time": 1.825, "x": 1.04, "y": 1.04 }
          ]
        }

Fui al sitio web oficial para informar este problema. La respuesta oficial es que parte de la información se perderá cuando la versión alta exporte el archivo de la versión baja. Puede ver la publicación aquí.

Sin embargo, después de intentarlo, se descubrió que 3.6 admite la operación de curva, por lo que puede agregar manualmente el atributo de curva del archivo de exportación 4.0 al archivo de exportación 3.6.

2. Animación de ruta perdida

La animación de importación encontró que falta la animación de la ruta original. Compare el json de la versión 3.6 exportado con el proyecto de la versión 4.0 y el archivo json de la versión 3.6 exportado con el proyecto de la versión 3.6. La palabra clave de la animación de ruta en el archivo json exportado en 3.6 es "ruta", mientras que la animación de ruta en el archivo json exportado en 4.0 es "ruta", lo que la hace irreconocible cuando se analiza json. Verifique el código relacionado con el tiempo de ejecución de la columna vertebral y descubra que la lógica del análisis json está en SkeletonJson.cs // Líneas de tiempo de restricción de ruta.

el codigo original es

// Path constraint timelines.
if (map.ContainsKey("paths")) 
{
    foreach (KeyValuePair<String, Object> constraintMap in (Dictionary<String, Object>)map["paths"]) 
    {
        //这里的逻辑无需修改,就不贴了
    }
} 

El código modificado es

// Path constraint timelines.
// 3.6版本默认导出的key是paths,4.0降版本之后导出的key是path,为了兼容,同事判断两个key
string[] pathKeys = { "paths", "path" };
string finalKey = null;
for (int i = 0; i < pathKeys.Length; i++)
{
    if (map.ContainsKey(pathKeys[i]))
    {
        finalKey = pathKeys[i];
        break;
    }
}
if (finalKey != null) 
{
    foreach (KeyValuePair<String, Object> constraintMap in (Dictionary<String, Object>)map[finalKey]) 
    {
        //这里的逻辑无需修改,就不贴了
    }
}

Después de la modificación, la animación de la ruta se puede reproducir normalmente.

Supongo que te gusta

Origin blog.csdn.net/shaobing32/article/details/122689160
Recomendado
Clasificación