ScreenPocket - 画面の隙間

Unityエンジニアの日々の雑記。たまにpython3とDirectXも触ります

モーションの計算を間引くには?

www.4gamer.net

上記のLimitedAnimationの記述を見て、「そういえばモーションの計算を間引くのはどうやればいいのだろう??」と気になったので調べてみました。


 ■ Animation(Legacy)の場合

単純に animation の enabled を 特定のフレーム間隔でtrueにすれば実現できました。

myAnimation.enabled = counter % 3 == 0;
counter++;

みたいな。
ちょっと面白かったのが、「3フレームに1回更新にするんだったら、アニメーション速度を3倍にしなければ…」と思っていたのですが、それが必要なかった点。

直前にenabledで計算した時間から経過時間をとっているのかな??


 ■ Animatorの場合

こちらも特定のタイミングでenabledをtruenにすれば良い。

ただ、こっちの場合はアニメーションスピードを間引いたフレーム分倍速化しなければ動きが一致しない。

myAnimator.enabled = counter % 3 == 0;
counter++;
myAnimator.speed = 3f;

みたいな。


という事でアニメーションの更新タイミングを間引くことが可能になりましたが、上記のリンク先にもあるように

最初期はFカーブを用いて毎秒60コマのフルフレームでキャラクターを動かし,その60コマのアニメーションから間引いていくような制作手法も試してみました。ただ,そうすると,ただの「コマ落ちした3Dグラフィックス」にしか見えなくて(笑)。

との事で、逆にチープになること請け合いかもしれません;

遠くのキャラのモーションを間引いて軽量化…とかには使えるかもですかね。

※動画は気が向いたら撮ります。