Mesh Animatorでつまづいたポイント

上記のツイートのようにMesh Animator最高なのですが、バグなのか仕様なのかわからないつまづきポイントがあったので記載しておきます。

 

Mesh Animatorで動かせるオブジェクトを用意した状態から説明を開始します。

 

今回はゲーム開始時に「Attack」アニメーションが再生されるようになっており、

2秒後に「Shield」アニメーションが再生されるようになっています。

どちらのアニメーションもループしない設定です。

 

「Shield」アニメーション再生後、現在どのアニメーションが再生されているかデバッグログに表示し、「Shield」アニメーションに設定してあるイベントが呼び出されたときに「何フレーム目に設定したイベントで、ゲーム開始から何秒後に呼び出されたか」表示しています。

アニメーション再生用のスクリプト

Shieldアニメーションのインスペクター

この状態でゲームを開始すると「Attack」アニメーションが再生され、再生が終わると終わった時点のフレームで停止します。

インスペクター上の「Current Frame」も43で停止しています。

Attackアニメーションの再生が終わりアニメーションが停止

そしてゲーム開始から2秒後、「Shield」アニメーションが再生されるのですが、ここで問題が発生します。

なんと18フレーム目から再生されてしまいます。

「Attack」アニメーションが1.4秒なので、停止してからの待ち時間は0.6秒。

どちらのアニメーションも30フレームで1秒なので、0.6秒=18フレーム。

そう、停止してからの待ち時間で経過した時間分、次のアニメーションが進んだ状態で再生されてしまうのです。

(待ち時間が次のアニメーション再生時間より長い場合は、最終フレームが再生されます)

 

さらに問題はもう一つ。

1フレーム目に呼び出すはずのイベントが呼ばれているのです。

これは怖い。

アニメーションが切り替わっていない・再生されていないように見えるのにイベントだけ呼ばれている、なんてことも起こりうるわけです。

18フレームから再生されてしまう

これを回避する方法が2つ見つかりました。

①アニメーション停止後に待ち時間があるアニメーションは、ループ設定にしておく

 これをすると次のアニメーションが0フレームから再生されるので問題は起こりません。

 ループ用のアニメーションを用意して設定するのがめんどくさいですが。

 

②MeshAnimatorBase.RestartAnim();を使う

 これは現在再生中のアニメーションを最初から再生するというメソッドです。

 次のアニメーションを再生した直後にRestartAnim();を行うとループ設定がなくても正常に次のアニメーションが再生され、イベントも正常に動作しました。

 手間がかからない分こちらの方が楽ですね。

Shieldアニメーション再生後にRestartAnim();を行う

他にも何かつまづくポイントがあったら記載したいと思います。

物理エネルギーが気持ちいい鉄球アクション『Ordeal -God of iron balls-』開発中!

  • コンセプト

 『巨大な物理エネルギーの溜めと解放でとんでもなく気持ちよくなれる』

 

  • ゲーム概要


www.youtube.com

 伸縮する鎖に繋がった鉄球振り回し、巨大な敵を倒していくアクションゲーム 

 

 鎖が伸びることで『エネルギーの溜め』が視覚的にわかり、

 ①溜めを解放することへの期待感

 ②『巨大なエネルギー』を解き放つ快感

 ③エネルギーを何かにぶつけたときの爽快感

 これらをより感じられる

 

 これだけだったら実現できているゲームもあるが、

 このゲームでは鉄球は物理演算で動き、鎖はゴムのような挙動をするため、

 リアルな物理エネルギーを感じられる

 これによって上記①~③の感覚をよりリアルに、より強く感じられ、

 どえらい気持ちよさが生まれるのだ

 

 その他にも

 ・プレイヤーはキャラクターを操作して鉄球を間接的に動かすので、

  狙い通りに鉄球を動かすのは少し難しい

 ・基本的に敵は巨大である

 ・キャラクターアニメーションと鎖の伸縮の連動

 ・ヒットストップや揺れ、エフェクトによる演出

 これらの要素によって『溜めと解放の気持ちよさ』は最大限まで高められている

                           (最大限まで高めたい!)

 

  • 確定していない仕様

 【詳細なジャンル】

  コンセプトを最大限楽しんでもらうにはバトルに注力すべきだと思う

  なので、ひたすらバトルを楽しむ+飽きにくい仕組みということで、

  「Slay the Spire」タイプのローグライク形式にしようかと考えている

 

  様々なエリアが存在するダンジョンに挑戦し、最深部にいるボスを倒すとクリア

  道中にセーブポイントはなく、キャラクターが死亡すると挑戦失敗となる

  ダンジョンは挑戦するたびにエリア配置と内容がランダムに変化

  多くのエリアではキャラクターの攻撃手段を増やせたり、最大HPを増やせたり、

  鎖の伸縮度合いや鉄球の大きさ・重さを変化させることが可能

  「Slay the Spire」のデッキビルドがキャラクタービルドに置き換わったイメージだ

f:id:MachHabanero:20210617132309p:plain

ダンジョン例

 

スマホアプリ『SpinSpinSpin!!!』をリリースしました!

f:id:MachHabanero:20190520210657p:plain

バネなキャラクターをひたすら回転させるアプリをリリースしました。

着地の衝撃でバネが縮み、縮みを解放すると跳ねることができます。

着地時の角度がいいと、縮んだバネが地面を転がり、

跳ねるときに爆発的な回転力を生みます。

 

上手くいくと高く跳ね、高速で回転し気持ちいいです。

是非、バネならではの遊びを体験してみてください。

 

iOShttps://itunes.apple.com/us/app/spinspinspin/id1463748490?l=ja&ls=1&mt=8

Androidhttps://play.google.com/store/apps/details?id=com.MachHabaneroGames.SpinSpinSpin