GameProgrammar's Night

ゲームプログラム系の覚え書き

UE4にSpineが来た

※ UE4.15の正式リリースに合わせて、UE4ランタイム実装が正式リリースとなりました。

ja.esotericsoftware.com

 Spineとは、2Dアニメーションにもボーンを取り入れて、3Dアニメーションのように、2Dアニメーションを作れるようにするツールです。誤解を恐れずに言えばSpriteStudioの親戚のようなものです。
 長らくUE4への対応は行われなかったのですが、次のバージョンアップで対応されることになりました。UE4.15から対応という予定ということで、UE4.15pre2で、動かしてみました。

 まだβ版ということもありSpine側のコードを変更する必要がありました。先行して触りたい人向けに、どこをいじれば良いかをざっと紹介したいと思います。

 Spnieが用意したUE4への導入ドキュメントはこちら

1. SpineのUE4ランタイムをDLする

 Spineのランタイムは、Githubで公開されてますのでDLします。

github.com

 UE4ランタイムが含まれているのはspine-ue4フォルダです。テスト用のUE4プロジェクトも含まれていますので、それをそのまま動かすことにします。

2. spine-ue4にspine-cのソースをコピーする

 spineランタイムの本体はspine-cフォルダのソースです。
 spine-c内のspine-cフォルダをフォルダごと、「spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public」にコピーします。
 
 コピーしたら、VSプロジェクトを再生成しておきます。

3. SpinePlugin.Build.cs にAssetToolsを追加する

 以下の2行を追加してください。

PrivateIncludePathModuleNames.AddRange(new string[] { "AssetTools" });
DynamicallyLoadedModuleNames.AddRange(new string[] { "AssetTools" });

4. コピーしたspine-c内にある「c」拡張子を「cpp」拡張子に書き換える

f:id:katze_7514:20170130202221j:plain

 Spineの製作者がcファイルをコンパイルできるようにするためのプルリクをしていて、UE4.15に含まれています。しかし、VSのプリコンパイルヘッダーの仕様でそれだけではコンパイルが通りません。そのため、cppとしてコンパイルすることにしました。

5. ソースを修正する

  • 拡張子を書き換えたcppファイルすべてに「SpinePluginPrivatePCH.h」を一番最初にincludeするように書き足す
  • 「SpineAtlasImportFactory.cpp」で「IAssetTools.h」をincludeする
  • 「SkeltonJson.cpp」の_spLinkedMesh構造体宣言をコメントアウトする
  • 「Atlas.cpp」266行目274行目あたり
    • 「if(!(count = readTuple(&begin, end, tuple))」の条件式を外に出す

まとめ

 ソースのUE4対応が中途半端なので、おそらくですがgithubに上がっているのは最新ではない気がします。

 プラグインとして、競合ソフトであるSpriteStudioより優位な部分は、

  • 追加シェーダがいらない
  • マテリアルを変更することができる

 というところでしょうか。