# ランタイムアーキテクチャ

Spineランタイムとは、Spineからエクスポートされたスケルトンデータをロードおよびレンダリングするために、アプリケーションに統合されるソフトウェアコンポーネントです。ランタイムは非常に柔軟性が高く、テクスチャをロードするタイミングや方法、ボーン操作やプロシージャルアニメーション、アニメーションのミキシングやレイヤリングなど様々なカスタマイズを行うことができます。

[ランタイムのページ](/spine-runtimes)にて、様々なプログラミング言語やゲームツールキットに利用可能なランタイムの一覧を掲載しています。

# ライセンス

Spineランタイムの使用許諾は、Spineライセンスによって与えられます。Spineライセンスをお持ちの方は、Spineランタイムを任意の数のアプリケーションに使用することができます。詳細については[Spine Editor License Agreement](/spine-editor-license)をご覧ください。

# ソースコード

Spineランタイムのソースコードは全て[GitHub](https://github.com/EsotericSoftware/spine-runtimes)で公開されています。ソースコードへのアクセスは、アプリケーションの根幹を成すこのようなコンポーネントにとって不可欠であり、特定のニーズに合わせたカスタマイズや最適化を可能にします。

ソースコードは、Gitを使用するか、GitHubの緑色のボタンから`Code`ボタンをクリックしてクローンするか、「Download ZIP」を選択することでダウンロードできます。

このドキュメントのコード例では、いかなる言語のランタイムにも簡単にトランスレートできる疑似コードを使用しています。各ランタイム固有のドキュメントについては、GitHubの各ランタイム固有のページ(README.mdファイル)をご覧ください。

# バージョン

SpineランタイムはSpineから[エクスポート](/spine-export)されたデータをロードします。Spineランタイムがデータを正常にロードできるように、正しいバージョンのSpineを使用するように注意する必要があります。お使いの[エディターバージョン](/spine-settings#Version%28バージョン%29)を固定化し、ランタイムバージョンと同期させることを推奨しています。また、SpineおよびSpineランタイムは常に改善されていますので、ランタイムとエディターのバージョンの両方を定期的に更新することをお勧めします。

[デフォルトブランチ](/git/spine-runtimes/tree)は、ベータ版を除く最新のSpineで動作します。また、各ランタイムのREADME.mdファイルに、対応するバージョンが記載されています。

[ベータ版](/spine-versioning#Betaリリース版)は定義上、全ての対応ランタイムをサポートしていない可能性があります。しかしながら、ランタイムの中には他より先に実用が開始されるものもあります。最新のランタイムが必要な場合、`4.2-beta`などベータバージョンの名前を持つブランチをご覧ください。もし興味のあるランタイムが更新されている場合、次の非ベータ版(正式版)がリリースされるまでの最新コードはそのブランチで見つけられます。ただし、ベータブランチではまだ新しい開発が進行中である可能性があることに注意してください。

# クラス図

このクラス図はランタイムの様々な部分がどのように組み合わされているかを説明しています。クリックするとフル解像度で表示できます。

[![](/img/runtimes-diagram.png)](/img/runtimes-diagram.png)

[APIリファレンス](/spine-api-reference)には、オブジェクトの種類ごとにプロパティやメソッドの詳細情報が記載されています。

# データオブジェクト

スケルトンデータは通常、高いレベルで「Setup Pose Data」オブジェクトにロードされ、テクスチャアトラスと組み合わされます。これらのデータオブジェクトは、スケルトンの「Instance Data」オブジェクトの作成に使用されます。これはステートフル（処理状態を把握するオブジェクト)なので、これらは画面上のそれぞれのスケルトンに対応します。データオブジェクトはステートレス（処理状態を把握しないオブジェクト）なので、任意の数のスケルトンインスタンスに共有することができます。

インスタンスデータに対応するデータオブジェクトのクラス名は、「Data」で終わります。対応するインスタンスデータを持たないデータオブジェクトにはAttachment、Skin、Animationのようなサフィックス(接尾語)がありません。

データオブジェクトを多数のスケルトンインスタンスで共有することは、データを一度ロードするだけで済むため効率的です。しかし、データオブジェクトが変更されると、その変更は全てのスケルトンインスタンスに影響を及ぼします。単一インスタンスに対してのみデータオブジェクトを変更するには、オブジェクトをコピーして、そのインスタンスに対してだけにオリジナルを置き換える必要があります。

# インスタンスオブジェクト

それぞれのインスタンスオブジェクトはデータオブジェクトと同じクラス名を持ちますが、「Data」というサフィックス(接尾語)はつきません。例えばSkeletonDataはデータオブジェクトですが、Skeletonはインスタンスオブジェクトです。

インスタンスオブジェクトはデータオブジェクトと多くの同じプロパティを持っています。データオブジェクトのプロパティはセットアップポーズを表し、通常は変更されません。インスタンスオブジェクトの同じプロパティは、そのインスタンスがアニメーションする際の現在のポーズを表しています。

全てのインスタンスオブジェクトはデータオブジェクトに対する参照を保持します。これはインスタンスオブジェクトをセットアップポーズにリセットするために使用されます。また、オブジェクトの名前のように、データオブジェクトにのみ存在し、インスタンスオブジェクトには存在しないプロパティもあります。

[次: スケルトンデータのロード](/spine-loading-skeleton-data)
[Spine Runtimes ガイド: 目次]