2013/10/20(日) [n年前の日記]
#1 [unity][blender] blenderで作ったモデルをUnityに読み込んでみたりしているところ
Unity上に、blenderで作ったモデルを読み込んでみたのだけど、アニメーションさせようとしていくつかつまずいたり。
正しい設定かどうかは分からないけど、現時点では、こういう設定にしたら動いた、てなあたりをメモ。
そんな感じで表示はできたものの。モーションがガクガクする…。Time.timeScale = 0.1f; 等をしてゆっくり表示してみたら、モーションがループする瞬間に、なんだか分からんけどフレームが飛んでいるようで。blender 上のモーションからしてそうなってるのかな…? 確認してみないと…。
Animation Type を Legacy にするあたりがなんだか気になるけど。ググってみたら、最近の Unity では Avatar だか Mecanim だかの概念が入ったモデルを動かすのがデフォルト、らしい。既存の説明ページで紹介されてる操作方法は古いタイプだから、Legacy を選ばないといかん、ということなのかもしれず。
正しい設定かどうかは分からないけど、現時点では、こういう設定にしたら動いた、てなあたりをメモ。
- FBXファイルをimportした際の、Rig の Animation Type は Legacy に。標準では Generic になってるのだけど、これだと何故かピクリとも動かず。
- Hierarchy に登録されてるモデルには、あるいは、そのモデルを表示する Prefab には、Animation コンポーネントを追加。Animator コンポーネントとやらがついてるからソレで事足りるのかなと思ったけどそういうわけじゃないみたい。
- Animations コンポーネント上で、使いたいアニメの個数を指定して、各モーションを登録していく。例えば、Wait、Walk、Run の3つを使うなら、Animations の Size を3に。その下の Elements 0〜2 に、Wait、Walk、Run を指定する感じ。
- アニメをループさせたいなら、スクリプト中で animation.wrapMode = WrapMode.Loop; を呼んでおく。
- アニメをさせるのは、animation.Play("モーション名") を呼べばいいらしいのだけど、animetion.CrossFade("モーション名") を使えば、以前のモーションから指定モーションに変化していくモーションになってくれるらしい。ただし、animetion.CrossFade("モーション名") は、Update() の中で毎フレーム呼んでおく。
そんな感じで表示はできたものの。モーションがガクガクする…。Time.timeScale = 0.1f; 等をしてゆっくり表示してみたら、モーションがループする瞬間に、なんだか分からんけどフレームが飛んでいるようで。blender 上のモーションからしてそうなってるのかな…? 確認してみないと…。
Animation Type を Legacy にするあたりがなんだか気になるけど。ググってみたら、最近の Unity では Avatar だか Mecanim だかの概念が入ったモデルを動かすのがデフォルト、らしい。既存の説明ページで紹介されてる操作方法は古いタイプだから、Legacy を選ばないといかん、ということなのかもしれず。
[ ツッコむ ]
以上、1 日分です。