こちらは 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へアップグレードする際の推奨手順:
-
念のため、3.8を使用していたプロジェクトのバックアップを作成してください。
-
開いているシーンをすべて閉じ、新しい空のシーンを作成し、何も選択されていない状態にしてください。これは、確実にアクティブなSpineオブジェクトが無い状態にするためです。
-
ご自身でSpine-Unityランタイムに加えたカスタム変更点があれば記録しておいてください。
-
古い「Spine」フォルダと「Spine Examples」フォルダを削除してください。
-
プロジェクトとUnityを閉じてください。
-
エクスポートされた古い3.8のスケルトンアセットを、再エクスポートされた4.0の対応するアセットに置き換えてください。その際、.meta
ファイルは削除しないでください。
-
Unityおよびプロジェクトを再度開いてください。
-
最新のSpine-Unity 4.0 unitypackageをインポートしてください。
-
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から以下の点を確認し、コードを再び互換性のあるものにするために必要なステップを実行してください:
-
すべてのSpine.Unity.AttachmentTools.SkinUtilities
Skin拡張メソッドが削除され、新しい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 Match
とMix and Match Equip
を参照してください。
-
Skin.GetAttachments()
はSkin.Attachments
に置き換えてください。戻り値の型は、ICollection<SkinEntry>
に変更されました。
-
Spine.Unity.AttachmentTools.AttachmentCloneExtensions
拡張メソッドは削除されました。Attachment.GetCopy()
はAttachment.Copy()
に、Attachment.GetLinkedMesh()
はAttachment.NewLinkedMesh()
に置き換えてください。
-
Spine.Unity.AttachmentTools.AttachmentRegionExtensions
の拡張メソッドAttachment.GetRegion()
は削除されました。代わりにAttachment.RendererObject as AtlasRegion
を使用してください。
-
以下の冗長なSpine.SkeletonExtensions
拡張メソッドを削除しました:
以下はSkeleton.SetSlotsToSetupPose()
に置き換えてください:
-
Skeleton.SetPropertyToSetupPose()
-
Skeleton.SetDrawOrderToSetupPose()
-
Skeleton.SetSlotAttachmentsToSetupPose()
-
Skeleton.SetSlotAttachmentToSetupPose()
以下はSlot.SetToSetupPose()
に置き換えてください:
また、以下のあまり一般的ではない拡張メソッドも削除しました:
TrackEntry.AllowImmediateQueue()
、 Animation.SetKeyedItemsToSetupPose()
、 Attachment.IsRenderable()
。
-
SkeletonData および Skeleton の次のメソッドを削除しました: FindBoneIndex
、FindSlotIndex
。ボーンとスロットには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 Clip
とClip End Mix Out Duration
パラメーターも提供しています。 デフォルトでは、タイムライン上でクリップの後に空白がある場合、空のアニメーションがClip End Mix Out Duration
のMixDuration
でトラック上に設定されます。Don't End with Clip
を true に設定すると、代わりにクリップのアニメーションを再生し続け、3.8 の古い挙動を模倣することができます。空のアニメーションにミックスアウトする代わりにアニメーションを一時停止したい場合は、Clip End Mix Out Duration
を0より小さい値に設定すると、アニメーションは代わりに一時停止されるようになります。
新しいUnitypackageは、こちらのダウンロードページからダウンロードできます: spine-unity Download
もし、このガイドに注意すべき点や追加すべき点があれば、遠慮なくこのスレッドに投稿してください。他の方にも分かりやすいようにガイドを更新させていただきます。
このSpineの新しいリリースが皆さんに気に入っていただけることを、そしてより素晴らしいゲームを作るための一助になれることを願っています! 🙂