スパインバージョンのダウングレード互換性の問題の処理

バージョン関連の知識

まず、Spineバージョンに関連するものを見てください。1つはSpineのソフトウェアバージョン、もう1つはSpineのエンジニアリングバージョン(.spine)、もう1つはSpineによってエクスポートされたファイルバージョン(.atlas png bytes / json)、最後はSpineランタイムのバージョンです。 Unity。ソフトウェアはSpineプロジェクトと下位互換性があり、他のソフトウェアは基本的に互換性がありません。通常の使用には同じバージョンが必要です。ランタイムがオープンソースプロジェクトである場合、ここにgitプロジェクトアドレスがあります

次の図に示すように、Spineソフトウェアのバージョンは起動時に選択できます。

上位バージョンのSpineソフトウェアは下位バージョンのプロジェクトファイルを開くことができます(4.0ソフトウェアは3.6プロジェクトを開きます)が、変更後に保存すると、プロジェクトファイルが上位バージョンにアップグレードされて作成されることに注意してください。ロールバックできません。したがって、この操作を実行するときは、最初に下位バージョンのプロジェクトをバックアップすることをお勧めします。

高バージョンのSpineソフトウェアは、低バージョンのエクスポートファイルをエクスポートでき、エクスポート時にバージョンを選択できますが、情報の損失と互換性の問題が発生します。

Spineソフトウェアは下位バージョンのエクスポートファイルをインポートできません。SpineエクスポートファイルとSpineRuntimeバージョンは1対1で対応しています。エクスポートされたSpineアニメーションファイルがRuntimeバージョンと一致しない場合、非互換性の問題が発生する可能性があります。また、SpineRuntimeとUnityにも一定の対応があります。次の図は、2022年1月24日現在の公式ウェブサイトに表示されている対応関係です。変更がある場合は、クリックして公式ウェブサイトの情報を表示できます。

Spineランタイムバージョン

サポートされているUnityバージョン

スパインユニティ4.0.00+

Unity 2017.1-2021.1

スパインユニティ3.8

Unity 2017.1-2020.3

スパインユニティ3.7

Unity 5.6-2018.4

スパインユニティ3.6

Unity 5.6-2018.2

スパインユニティ3.5

Unity 5.4-2017.1

スパインユニティ3.0

Unity 4.6

ダウングレード手順

動作環境:Unityターゲットバージョンは2020、スパインランタイム3.6、スパインプロジェクトとソフトウェアは両方とも4.0です

1.脊椎アニメーションファイルをエクスポートします

プロジェクトを開き、ファイルをエクスポートするときにバージョン3.6を選択し、.atlas.txt.png.jsonファイルを生成します

生成されるファイルは次のとおりです

ここで注意が必要な問題があります。エクスポートされたファイルのスパインバージョンフィールドを変更する必要があります。選択したバージョンは3.6ですが、エクスポートすると、バージョンフィールドは「spine」と表示されます:「3.7-from-3.8- from-4.0.58"。スパインバージョンフィールドを3.6に変更します

修正する前に:

{

"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 }

}

変更後:

{

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

}

2.マテリアルファイルと.assetファイルを生成します

ここで、生成された.atlas.txt .png.jsonファイルをunity2020プロジェクトに直接インポートすると、SkeletonData.assetファイルを正しく生成できません。したがって、Unityの下位バージョンを使用する必要があります。

したがって、最初にエクスポートファイルをspine3.6ランタイムに追加されたunity2019プロジェクトにドラッグし、.assetファイルとマテリアルを正しく生成します。

3.スパインエクスポートファイルと生成されたマテリアルおよび.assetファイルをインポートします

unity2019では、エクスポートファイルと生成されたマテリアルおよび.assetファイルなどを選択し、リソースを.unitypackageファイルにエクスポートし、最後にunity 2020プロジェクトに戻ってから、.unitypackageファイルをインポートします。アニメーションは正常に使用できます。(ファイルをここに直接ドラッグした場合、2020プロジェクトに直接ドラッグした場合にもエラーが発生することに注意してください)

バージョンのダウングレードによって引き起こされる問題

1.曲線情報の喪失

スパイン4.0ソフトウェアを使用して、それぞれバージョン3.6および4.0のカーブ属性を持つアニメーションをエクスポートします。

以下はバージョン4.0で、「曲線」情報が正常にエクスポートされていることがわかります。

"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 }
        ]
      }

以下はバージョン3.6で、移動のすべての曲線情報が失われていることがわかります。

"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 }
          ]
        }

この問題を報告するために公式ウェブサイトにアクセスしました。公式の回答では、高バージョンが低バージョンのファイルをエクスポートすると一部の情報が失われるとのことです。投稿はこちらで確認できます。

ただし、試してみたところ、3.6自体がカーブ操作をサポートしていることがわかったため、4.0エクスポートファイルのカーブ属性を3.6エクスポートファイルに手動で追加できます。

2.パスアニメーションが失われました

インポートアニメーションで、元のパスアニメーションが欠落していることがわかりました。4.0バージョンのプロジェクトでエクスポートされた3.6バージョンのjsonと、3.6バージョンのプロジェクトでエクスポートされた3.6バージョンのjsonファイルを比較します。3.6でエクスポートされたjsonファイルのパスアニメーションのキーワードは「paths」ですが、4.0でエクスポートされたjsonファイルのパスアニメーションは「path」であるため、jsonを解析すると認識できなくなります。スパインランタイム関連のコードを確認し、json解析のロジックがSkeletonJson.cs//パス制約のタイムラインにあることを確認します。以下のコード

元のコードは

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

変更されたコードは

// 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]) 
    {
        //这里的逻辑无需修改,就不贴了
    }
}

変更後は、パスアニメーションを正常に再生できます。

おすすめ

転載: blog.csdn.net/shaobing32/article/details/122689160