#UE4 に Spine のランタイムを組み込んで、Mix and Match example を出してみた。ここまでくるのに少し苦労した。
現状では、Spine の UE4 ランタイムは最新版の UE4.24 ではコンパイルできない。サンプルのプロジェクトも 4.23 で作られている。しかしこのサンプルプロジェクトは 4.24 でも動く。
そこで、まず UE4.23 をダウンロードして新規のプロジェクトを 4.23 で作り、そこに Spine のプラグインをインストールし、それを改めて 4.24 で開くと自動的にコードやデータが変換されるので、それで動くようになった。
この mix-and-match の例はキャラクターに着せ替えができるサンプルなんだけど、これをこのまま UE4 のマップに配置しても何も表示されない。しばらくいろいろいじってみた結果、skin を適切に設定する必要があるということがわかった。女の子なら full-skins/girl、男の子なら full-skins/boy というスキンを設定すれば上のような絵が表示された。
UE4 の Character クラスは、内部にスケルタルメッシュをもつことが前提になっているけど、Spine のスケルトンは UE4 のスケルタルメッシュとは互換性がない。そこで仕方なく、空のスケルタルメッシュの子として Spine Skeleton Renderer コンポーネントを配置したら動いた。
キャラクターの絵は右向きに書かれているので、左向きに歩くときは X 軸方向に絵を反転させた。このとき、カメラの向きに対して歩いている方向が右か左かを判定するために、下のような計算をした。
カメラの視線方向と上方向の外積をとって画面の右方向を求め、それと速度の方向の内積の符号を求めている。Blueprint はこういうちょっとした数値計算を書くのが結構だるい。