うにty生活

UnityChanを生活させたい

AnimationのTriggerがイライラしたのでメモ #3.1

 

f:id:tubakihimeLoveHate:20190418224059j:plain

 

どうも、ラブヘイトです!

Twitterでいいね、リツイート等沢山していただきありがとうございます

 

今回はタイトル通りです

前回の記事、

【Blender】→【Unity】Unityちゃんのアニメーション作成してみた #19 - うにty生活

この中で、Unityちゃんに1度だけ発動するアニメーションをつけようとしたところ

苦戦したのでメモします

 

◆Triggerとは

衝突判定の方ではありません。Animationの方のTriggerです

 

メカニム(アニメーション管理システム)ではステート遷移のためにパラメーターというフラグを使います

 

パラメーターの種類↓

f:id:tubakihimeLoveHate:20190416215154p:plain

今回はこのTriggerパラメーターについてのお話です

TriggerはBoolと似ていますが、一度だけ指定のモーションをしてくれます(Loopの場合は繰り返す)

そのため、使い方が正しければとても便利なのです

 

◆Triggerの説明・使い方

Triggerは一度だけ発動して自動的に元に戻ります

例えば、"opendoor"というモーションにTriggerでアニメーション遷移をしたい時のアニメーションコントローラーはこんな感じ↓

f:id:tubakihimeLoveHate:20190416215532p:plain

 

遷移するコードはこれです

animator.SetTrigger("Triggerの名前");

 

 

 

◆いらいらポイント

 

Triggerのいらいらポイント

1.高速に実行されているメソッドで使用できない

2.元のアニメーションへの戻し方がわからない

3.たまに自動で戻らない

 

1.高速に実行されているメソッドで使用できない

これはもちろんUpdateに直に書いてはいけないですが、if(Input.GetKey)などの中やfor内ではうまく動作しません

一度だけ動作する場所に記述しましょう

if(Input.GetKeyDown(KeyCode.J)){
animator.SetTrigger("Triggerの名前");
}

 後は、衝突した時などに使えそうな気がします

 

2.元のアニメーションへの戻し方がわからない

リファレンスに戻り方は記されていませんでした

というか内容の薄さに驚きました。もしかするとメカニムでの設定は別のページなのかもしれません

結果を先に記述すると、元のアニメーションに戻るにはトランジョンのConditionに何も設定しないことです

f:id:tubakihimeLoveHate:20190417193951p:plain

上の画像でcoldステートに返っている方のトランジョンです

f:id:tubakihimeLoveHate:20190417194127p:plain

このようにConditionには何も設定しなくて良いです

 

かなり探しました

 

3.たまに自動で戻らない

この不具合は原因がわからず、再現できないため経験談になります(全部経験談やけど)

普通Triggerは一度呼び出すと、1回だけ実行して元に戻りますよね?

しかしたまに戻らない時があるのです

原因はどうであれ明示的に元に戻すメソッドが用意されています

 

Unity - スクリプティング API: Animator.ResetTrigger

これが使いにくい!

というかそもそもTrigger戻らない時点で、アニメーションシステムが動作しなくなるので明らかに不具合です

 

まずsetTrigger使ってすぐResetTrrigerを使った場合

animator.SetTrigger("Door");
animator.ResetTrigger("Door");

これだと確かにTriggerはリセットされています

ただ高速にTriggerがOnOffするだけなのでTriggerで発動したいアニメーションが発動しない。これでは意味がありません

 

Triggerが戻らなくても別にエラーも何も出ないので例外処理でもキャッチできず、アニメーション止まってしまうし、ResetTriggerを有用に使う記事は見当たりませんでした

 いつ使うのやら・・・

◆応用編

Tiggerは一度使ったら元のアニメーションに戻ると説明しました

Triggerを使って連続で同じアニメーションをするには、Boolと併用します

 

まずはBoolパラメーターを作成します。OpenDoorというパラメーターを用意しました

f:id:tubakihimeLoveHate:20190418211438p:plain

 

次にステートとトランジョンの設定です

f:id:tubakihimeLoveHate:20190418211941p:plain

cold->test に「Opendoor/ false」

test->coldには「Opendoor/true」

testステートには自分自身にトランジョンを設定します。他のトランジョンと一緒でMake Transionして少し離し、またステートに戻すと設定可能です。

Conditionには「Door」ステートを設定します

 

実際の動きと合わせてメカニムの動きも見て行きましょう

f:id:tubakihimeLoveHate:20190418221445g:plain


 Opendoorを falseに戻せばもちろん前のアニメーションに戻ることが可能です!

どこかで使うことがあるかもしれませんね

 

というとこで今回はブログでの怒り発散コーナーでした笑

 

 

--------------------------------------------------------------------------------

※当ブログにおいてナンバリングはあまり関係ありません 

私とブログの成長記のようなものです