【Unity】3Dモデルのアニメーションを別の3Dモデルで使い回したい
3Dキャラ同士同じアニメ使えるやろ
- Unity chanは3Dキャラやん
- Unity chanにアニメーションあるやん
- 他の3Dキャラにも同じアニメーションいけるやろ
- ペタッと
- ちーん
これとか
こうとか
見たことありませんかね?
「合っとるやろ!?なんでお前は言うことを聞かないんや!?もうええ!」
とsteamを起動していたんですが、いい加減に向き合おうと思いました。
格闘ゲーム作りたくなったんです
パンチとかキックとか良いですよね。カッコイイですよね。
でも自分はバーチャファイターや鉄拳は凄いヘタでして…。
2D格闘世代なので、SFやKOFやGGとかの方が馴染みがあります。
闘神伝とトバルNo.1はそっと胸の奥に閉まっておきました。
使用したAsset
ファイティングユニティちゃん 無料体験アセット
https://www.assetstore.unity3d.com/jp/#!/content/33478
Jeremyくん 無料
https://www.assetstore.unity3d.com/jp/#!/content/33083
この二方を利用して、アニメーションの使い回しをしてみます。
Avator RigのAnimation Typeをおさらい
Avator RigのAnimation Typeは以下の3つがある
- Humanoid
- Generic
- Legacy
Humanoid
ボーン構造などの基本的な構造の統一化を図り、リターゲッティングと呼ばれる
さまざまなモデルに同じアニメーションが共有できる仕組みが扱える。
docs.unity3d.com
docs.unity3d.com
Generic
非ヒューマノイドアニメーションと言われ、動物などで主に利用される事を想定している。
Mechanimで扱うことは出来るが、共有して扱うことは出来ない。
docs.unity3d.com
Legacy
これはそのまま旧アニメーションでそのオブジェクトに紐づくアニメーション。
Mechanim非対応のアニメーションの場合はコレになるのかな。
docs.unity3d.com
結論
つまり、HumanoidのTypeにしてあげれば共通して使うことが出来るはずだ。
設定を見直そう
Unity chanのmodelのRigを見る
Animation Type = Generic -> Humanoid に変更して Apply
JeremyくんのmodelのRigを見る
Animation Type = Generic -> Humanoid に変更して Apply
あれ、まだ駄目?モデルだけではなく、Animation Clipも編集しよう。
ポチポチとAnimation ClipのRigを見て
Animation Type = Generic -> Humanoid に変更して Apply
Unity chan , Jeremy共に同じAnimator Controllerでいいはずだ。
FightingUnityChan_freeをセット。
実装
こんなスクリプトをButtonで呼び出すようにして
public Animator player; public Animator enemy; public void Punch() { player.SetBool("Jab", true); enemy.SetBool("Jab", true); } public void Kick() { player.SetBool("SAMK", true); enemy.SetBool("SAMK", true); } // Fighting Unitychan側には無い、Jeremy側のアニメーション。 // 逆も出来るはずだ、というテスト。 public void Victory() { player.SetBool("Victory", true); enemy.SetBool("Victory", true); }
実行すると
OK!!
(後で気づいたんですが、Jeremyくんパンツ履いてなかった。)
さぁ、steamを起動しよう!
書く(読む)と長いんだけど、やると本当にすぐです。五分ぐらいで終わっちゃう。
ちょっとググったら答えはすぐに出るんだけど、自分なりに調査した結果をメモっておく、って事で。
steamを起動する時は、熱々のピザとキンキンに冷えたコーラを忘れずにね!