• 日本語
  • Spine-Unity 3.8 から 4.0 へのアップグレードガイド

こちらは Spine-Unity 3.8 to 4.0 Upgrade Guide の日本語版です。

3.8より古いバージョンのspine-unityからアップグレードする場合、コードとアセットを調整する方法については、それぞれのアップグレードガイドを参照してください:
Spine-Unity 3.7 to 3.8 Upgrade Guide
Spine-Unity 3.6 to 3.7 Upgrade Guide

スケルトンデータの再エクスポート
注意: Spine3.8からエクスポートされたJsonおよびバイナリスケルトンデータファイルは、Spine-Unity4.0ランタイムではロードできません
Spine4.0を使用してスケルトンデータファイルを再エクスポートする必要があります。

プロジェクトがたくさんある場合、以下を参考にプロジェクトファイルのエクスポートを自動化することをお勧めします:
コマンドラインインターフェース - Spineユーザーガイド
例として、Spineのサンプルプロジェクトをすべてエクスポートし、テクスチャアトラスを作成するためのスクリプトがこちらにあります:
https://github.com/EsotericSoftware/spine-runtimes/blob/4.0/examples/export/export.sh

3.8から4.0へアップグレードする際の推奨手順:

  1. 念のため、3.8を使用していたプロジェクトのバックアップを作成してください。

  2. 開いているシーンをすべて閉じ、新しい空のシーンを作成し、何も選択されていない状態にしてください。これは、確実にアクティブなSpineオブジェクトが無い状態にするためです。

  3. ご自身でSpine-Unityランタイムに加えたカスタム変更点があれば記録しておいてください。

  4. 古い「Spine」フォルダと「Spine Examples」フォルダを削除してください。

  5. プロジェクトとUnityを閉じてください。

  6. エクスポートされた古い3.8のスケルトンアセットを、再エクスポートされた4.0の対応するアセットに置き換えてください。その際、.metaファイルは削除しないでください。

  7. Unityおよびプロジェクトを再度開いてください。

  8. 最新のSpine-Unity 4.0 unitypackageをインポートしてください。

  9. Projectパネルで右マウスボタンクリックをしてReimport Allを選択してください (または、スケルトンアセットが含まれているフォルダ上でReimportを選択してください)。

4.0のAPI変更にコードを適応させる
APIの注意すべき変更点については、ChangelogのC#およびUnityセクションをご覧ください。
https://github.com/EsotericSoftware/spine-runtimes/blob/4.0/CHANGELOG.md#c-2

4.0では、一部のメソッドの名前が変更されたり、置き換えられたりしています。
名前変更により存在しなくなったメソッドを使用したためにコードでコンパイルエラーが発生してしまった場合、Changelogから以下の点を確認し、コードを再び互換性のあるものにするために必要なステップを実行してください:

  1. すべてのSpine.Unity.AttachmentTools.SkinUtilitiesSkin拡張メソッドが削除され、新しいSkin APIに置き換わりました。コンパイルエラーを修正するためには、 Skin 拡張メソッドの使用箇所を対応するメソッドに置き換えてください。 例えば、skin.AddAttachments()skin.AddSkin()に置き換えてください。UnshareSkin()を使用している場合は、以下のように置き換えることができます:

    skeletonAnimation.Skeleton.UnshareSkin();
    // 上を以下のコードに置き換えてください:
    Skin customSkin = new Skin("custom skin");
    customSkin.AddSkin(skeletonAnimation.Skeleton.Skin);

    新しいSkin APIを使用してスキンを組み合わせる方法については、サンプルシーンMix and Match Skinsを、古いワークフローを使用していた既存のプロジェクトを更新する方法については、更新された古いサンプルシーンMix and MatchMix and Match Equipを参照してください。

  2. Skin.GetAttachments()Skin.Attachmentsに置き換えてください。戻り値の型は、ICollection<SkinEntry>に変更されました。

  3. Spine.Unity.AttachmentTools.AttachmentCloneExtensions拡張メソッドは削除されました。Attachment.GetCopy()Attachment.Copy()に、Attachment.GetLinkedMesh()Attachment.NewLinkedMesh()に置き換えてください。

  4. Spine.Unity.AttachmentTools.AttachmentRegionExtensionsの拡張メソッドAttachment.GetRegion()は削除されました。代わりにAttachment.RendererObject as AtlasRegionを使用してください。

  5. 以下の冗長なSpine.SkeletonExtensions拡張メソッドを削除しました:
    以下はSkeleton.SetSlotsToSetupPose()に置き換えてください:

    • Skeleton.SetPropertyToSetupPose()

    • Skeleton.SetDrawOrderToSetupPose()

    • Skeleton.SetSlotAttachmentsToSetupPose()

    • Skeleton.SetSlotAttachmentToSetupPose()

    以下はSlot.SetToSetupPose()に置き換えてください:

    • Slot.SetColorToSetupPose()

    • Slot.SetAttachmentToSetupPose()

    また、以下のあまり一般的ではない拡張メソッドも削除しました:
    TrackEntry.AllowImmediateQueue()Animation.SetKeyedItemsToSetupPose()Attachment.IsRenderable()

  6. SkeletonData および Skeleton の次のメソッドを削除しました: FindBoneIndexFindSlotIndex。ボーンとスロットにはIndexフィールドがあり、それを代わりに使用する必要があります。 必要に応じてslot.Indexにアクセスする前にslot == nullなどのチェックを適宜行ってください。
    以下を:

    • int index = skeletonData.FindSlotIndex(slotName);
      以下に置き換えてください
    • SlotData slot = skeletonData.FindSlot(slotName); int index = slot != null ? slot.Index : -1;

    以下を:

    • int index = skeleton.FindBoneIndex(boneName);
      以下に置き換えてください
    • Bone bone = skeleton.FindBone(boneName); int index = bone != null ? bone.Index : -1;

3.8から4.0での挙動の変更点
挙動の変更点の全一覧については、ChangelogのC#およびUnityセクションを参照してください。
https://github.com/EsotericSoftware/spine-runtimes/blob/4.0/CHANGELOG.md#c-2

  • コンストレイントが、他のコンストレイントによって行われた変更をリセットしなくなりました。 3.8では、コンストレイントは他のコンストレイントによって行われた変更を元に戻してしまうことがありました。4.0では、これはもう起こりません。あなたのプロジェクトがたまたま3.8の挙動に依存していた場合、4.0に移行すると、コンストレイントが予期せずボーンに影響を与える可能性があります。

  • allowMultipleCanvasRenderersがtrueの場合、SkeletonGraphicは、各サブメッシュレンダラーGameObjectでRawImageコンポーネントを使用しないようになりました 。その代わり、よりリソースに優しい新しいカスタムコンポーネントSkeletonSubmeshGraphicが使用されます。 これらのコンポーネントの置換はエディタースクリプトによって自動的に行われ、シーンやプレハブの保存はこのアップグレードを持続させます。

  • リニア色空間: 以前まで、スロットカラーはUnityのLinear色空間とSpineエディターのColor management - Linear blending設定とで同じように表示されませんでしたが、この問題を解決しました。これは、URPおよびLWRPシェーダーを含むすべてのシェーダーで修正されました。もし不正確な表示を補正するためにスロットカラーを微調整されていた場合は、微調整したカラーを調整された方が良いかもしれません。

  • Additive(加算)に設定されたスロットは、これまでターゲットバッファに書き込まれる前に常にlitになっていました。現在、すべてのlitシェーダーは追加パラメーター Light Affects Additive を提供するようになりました。デフォルトは false です。このパラメーターを true に設定することにより、以前の挙動を有効にすることができます。

  • Premultiply AlphaブレンドモードにおけるすべてのSpriteシェーダー (URPおよびLWRPパッケージを含む)のブレンド挙動を修正しました。Premultiply AlphaブレンドモードはPMAテクスチャとPMA頂点カラー入力を想定していますが、以前は頂点カラーアルファが再び事前乗算されてしまっていました。したがって、スロットのアルファブレンディングは、4.0にアップグレードすると、正しく軽量化されます。
    もし、Advanced - PMA Vertex Colorsを無効にしてこの問題を補正されていた場合、このパラメータを再度有効にすることができ、Additive(加算)スロットをシングルパスでレンダリングすることも可能になりました。

  • Advanced - Sample 8 Neighbourhoodが無効の場合、すべてのアウトラインシェーダーのアウトラインの厚みが修正されました(4 Neighbourhood を使用するため)。以前のアウトラインの厚さを復元するには、Outline Thresholdパラメータを調整しSample 8 Neighbourhoodが無効なアウトラインシェーダーで/4を追加して、しきい値を4分の1に小さくしてください。

  • Directorの一時停止時に、Timelineがクリップの再生を一時停止(および再開)しないように修正しました。これは現在、デフォルトの挙動になっています。以前の挙動(例:Director の一時停止中に待機アニメーションを再生し続ける等)が必要な場合、各Timelineクリップに対して有効にできる Don't Pause with Director という追加パラメータが用意されています。

  • TimelineのSpine AnimationState Clipsがクリップ終了後にTimeline上の空白を無視するのを修正しました。以前の挙動の方が良かった場合のために、Timelineクリップは現在、Don’t End with ClipClip End Mix Out Durationパラメーターも提供しています。 デフォルトでは、タイムライン上でクリップの後に空白がある場合、空のアニメーションがClip End Mix Out DurationMixDurationでトラック上に設定されます。Don't End with Clip を true に設定すると、代わりにクリップのアニメーションを再生し続け、3.8 の古い挙動を模倣することができます。空のアニメーションにミックスアウトする代わりにアニメーションを一時停止したい場合は、Clip End Mix Out Durationを0より小さい値に設定すると、アニメーションは代わりに一時停止されるようになります。

新しいUnitypackageは、こちらのダウンロードページからダウンロードできます: spine-unity Download

もし、このガイドに注意すべき点や追加すべき点があれば、遠慮なくこのスレッドに投稿してください。他の方にも分かりやすいようにガイドを更新させていただきます。

このSpineの新しいリリースが皆さんに気に入っていただけることを、そしてより素晴らしいゲームを作るための一助になれることを願っています! 🙂

Related Discussions
...