前も少し書いたけど、改めてメモ。 アーマチュアでボーンアニメーションしたモデルを書き出す方法。 前提として、複数のアニメーションを1モデルに入れておくとうまくいかず、1モデル(1USZファイル)1アニメーションで書き出す必要がある。あるいは1タイムラインに全アニメーションを入れる(0~5フレームはIdle, 6~10フレームはWalkみたいな。) 上記情報の出典は古めだがWWDC2021のDive into RealityKit 2 の17:23くらい

  1. Action Editorでアニメーション作る。一つはいわゆるTPose(デフォルトのポーズ)にして、_TPoseなどとして名前順で最初にTPoseが来るようにしておく
  2. Armatureとモデルのメッシュを選択
  3. Export→glTF2.0で
    • Include -> Limit to Selected Object にチェック
    • Data -> Mesh -> Apply Modifiersにチェック
    • Animation -> Action Filterで、書き出したいActionを一つだけ選択する
  4. Reality Converterで開く
    • うまくいくと、TPoseで開かれつつも、下に再生ボタンが出現し、再生すると、1.でAction Filterで含めたアニメーションが再生される。
  5. 上記ステップを繰り返し、アニメーションを一つずつExportしていく。ミスっても書き出し直せばReality Convereterが自動で読み込み直してくれる。

Reality Converterのスクショ

その後、Idleアニメーション付きモデルをベースのEntityとして読み込んで、かつ動いている時にはWalkアニメーション付きモデルを読み込んで、playAnimation(_:, transitionDuration:, startsPaused:) で動かすだけだと思ってたらメソッド呼び出した時点でエラー。

Cannot find a BindPoint for any bind path: "", "", "Walk3.Armature_24", "Walk3.Armature_24.SkeletalPose.SkeletalPoses[0]"

なんかモデル間でボーンとかが一致してなさそう?と思ってだいぶ悩んだのだけど、いや同じモデルだしな、ということでだいぶ悩み続けて、結果、解決できた。

解決方法は、ふたつのモデル(IdleのとWalkの)を同じReality Composer Proのsceneに入れてあげて、sceneからfindEntityで取得したらできました。なんでだろう。同じsceneに登録してないとかなんかあるのかなと思いつつハマりそうなのでここにメモしておきます。

そして作ったキャラをアニメーション付きで操作できるようになりました。(クリックでTwitterに飛びます)