見出し画像

ダンスゲーを作りたい#15 Animationの速度を曲に合わせるその2

ぼちぼち嫌になってきましたね。

トリック3見ながら作業するとかろうじて正気を保てます。

さて、前回曲再生とBPM取得できたので、モーションの速度を可変させましょう。

モーション調整

まず1秒何フレームで動いてるのか知らないといけませんね。

以前作成したtoprockのAnimationは75フレームあります。

モーションの再生時間をclipinfoから取得すると、

画像1

とのことです。

ってことは1秒24フレームですね。禪院直哉かな?

次は基準になるBPMを決めねばなりません。

今回はモーションの作りやすさを意識してBPM72を基準にします。

すると、1拍20フレームになってキーフレーム打つとき気持ちよさそうだからです。

以前作ったやつをそのように直しておきました。

実際トレスする際はBPM100とかで踊って0.72倍速にでもしたらいいと思います。

曲のBPMにモーションを合わせる

モーションの等倍速のBPMが72なので、例えばBPM100の曲に合わせる場合、100/72倍速にすればいいわけです。

以前作ったMotion_managerのモーション再生用の関数の再生速度を指定する部分に若干変更を加えました。

    public float musicBPM; //曲のBPMを格納
    
    public void setMotion(int BtNo){
       //前のボタンと同じ
       if(BtNo==lastBtNo){
           step+=1; //次のステップへ
           StopTime=timelist_toprock[step+1]; //次の停止時間
       }else{
           //別のボタン押された
           step=0; //一番最初のステップから開始
           lastBtNo=BtNo; //押されたボタンを記憶
           StopTime=timelist_toprock[step+1]; //次の停止時間
           animator.SetTrigger(MotionNameList[userdata.MotionSet[BtNo]]); //アニメーションを遷移
       }       
       
       if(step<=5){ //雑に配列作ったのでOutOfBounds対策
           animator.Play("Base Layer", 0,timelist_toprock[step]); //所定のレイヤーのAnimationを区切り位置から開始
           
           //ここを若干変更
           animator.SetFloat("MoveSpeed", 1.0f*(musicBPM/72f)); //再生速度を戻す
       
       }     
   }

musicBPMはMusic_managerからいい感じに取得します。

画像2

↑BPM85の時↑

画像3

↑BPM120の時↑

どうでしょうか。

少しわかりづらいですが、ちゃんとモーションそのものの速度が変わっています。

よかったよかった。

今回はこんなもんにして、次回は同じ要領で、押してる間倍速再生と半速再生するボタンも作っていきましょう。

では。

この記事が気に入ったらサポートをしてみませんか?