Unity 3Dキャラ待機モーションと攻撃モーションの切替2/4

前回は、Unity の無料の 3D キャラクターアセット「Adventure Character 」をシーンに配置して、「Mixamo」で無料で入手した「待機」アニメーションから「攻撃」アニメーションへのステート遷移の設定と Animator ウィンドウによるパラメータ操作によるステート遷移のテスト実行を紹介しました。

前回の記事:Unity 3Dキャラ待機モーションと攻撃モーションの切替1/4 | Compota-Soft-Press

※画像内のステータスという言葉は正しくはステートです。

今回は、AnimationController 内で攻撃ステートに遷移して、攻撃アニメーションを実行した後に、待機ステートに戻る設定と、その際に発生した警告について紹介します。
※ Unity のバージョンは 2021.3.25f1 です。3D キャラクターは Unity の無料アセット「Adventure Character」を使用しています。アニメーションは「Mixamo」から入手したものを使用しています。

待機アニメーションに戻す遷移の設定

前回、 Attacking パラメータのチェックボックスを操作して true にするとデフォルトの待機ステートから攻撃ステートに遷移する設定を行いました。
これだけでは、攻撃ステートのアニメーションが終わった後の遷移がないので、アニメーションが行われなくなります。

※ シーン再生時に Animator ウィンドウのステートの青いプログレッシブバーを表示するには、そのアニメーションを行っているゲームオブジェクト(例では Man_Full)を選択しておく必要があります。

※動画内のステータスという言葉は正しくはステートです。

そこで、攻撃のアニメーションが終わったら、待機ステートに戻るための、攻撃→待機の遷移を作成します。

前回同様、遷移元の攻撃ステートで右クリックして表示されたメニューで Make Transition を選択して、遷移先の待機ステートでクリックすると遷移を表す矢印付きの線で接続されます。

Unity AnimationController 攻撃ステータスから待機ステータスへの遷移を作成します.

作成した遷移の線をクリックして Inspector で確認します。
既定の状態では、遷移先(例では「待機」)に遷移する条件はありません。
現在のアニメーション(例では「攻撃」)が完了する直前にわずかな時間を経て遷移先のアニメーション(例では「待機」)に移行します。

Unity AnimationController の遷移を作成した直後は無条件でアニメーションの完了直前からわずかな期間で遷移先のアニメーションに変化します.

待機から攻撃への遷移では、 Attacking が true であるという条件を追加したり、即座にアニメーションを変えるために Has Exit Time を無効にしました。

しかし、今回の攻撃から待機へと戻る遷移では、無条件で Has Exit Time も有効にします。
Has Exit Time の設定により、攻撃アニメーションが指定の時間まで完了したら、遷移先の待機アニメーションに移り変わります。

※ シーン再生時に Animator ウィンドウのステートの青いプログレッシブバーを表示するには、そのアニメーションを行っているゲームオブジェクト(例では Man_Full)を選択しておく必要があります。

※動画内のステータスという言葉は正しくはステートです。

無条件の遷移で as Exit Time を無効にすると発生する警告

今回追加した「攻撃」→「待機」の遷移の設定では、アニメーションの一定時間の再生後に遷移先のアニメーションに移り変わっていく Has Exit Time の設定が重要でした。
これのおかげで、何もしなくてもアニメーションが完了したら、遷移先に移ることができました。

好奇心で、 Has Exit Time を無効にすると、以下のような警告が Console と遷移の設定を行う Inspector ウィンドウに表示されました。

Unity AnimatorController の遷移の設定で無条件で HasExitTime を無効にすると発生する警告
Unity AnimatorController の遷移の設定で無条件で HasExitTime を無効にすると発生する警告(Inspectorウィンドウ内)

翻訳してみると、条件が指定されず、 Exit Time も持っていない場合は、遷移自体が無視されることがわかりました。

Transition '攻撃 -> 待機' in state '攻撃' doesn't have an Exit Time or any condition, transition will be igunored
(Google翻訳)
状態「攻撃」の遷移「攻撃 -> 待機」には終了時間または条件がありません。遷移は無視されます

今回はここまで

今回は、Unity の AnimationController の「待機(デフォルト)」・「攻撃」 2 つのステート間に往復するための 2 番目の遷移を作成して、攻撃アニメーションの完了とほぼ同時に無条件に待機アニメーションに戻る設定を紹介しました。
また、それをプログラムを使わずに Animator ウィンドウの機能だけでテストしました。
遷移が無条件かつ Exit Time もない場合は無視される仕様も警告文から確認しました。

参照サイト Thank You !

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました