前回は、Unity の無料の 3D キャラクターアセット「Adventure Character 」をシーンに配置して、「Mixamo」で無料で入手した「待機」アニメーションから「攻撃」アニメーションへのステート遷移の設定と Animator ウィンドウによるパラメータ操作によるステート遷移のテスト実行を紹介しました。
前回の記事:Unity 3Dキャラ待機モーションと攻撃モーションの切替1/4 | Compota-Soft-Press
![Unity AnimationController のパラメータを変更することで他のステータス(アニメーション)に遷移しました.1/3](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-のパラメータを変更することで他のステータス(アニメーション)に遷移しました.1.png)
![Unity AnimationController のパラメータを変更することで他のステータス(アニメーション)に遷移しました.2/3](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-のパラメータを変更することで他のステータス(アニメーション)に遷移しました.2.png)
![Unity AnimationController のパラメータを変更することで他のステータス(アニメーション)に遷移しました.3/3](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-のパラメータを変更することで他のステータス(アニメーション)に遷移しました.3.png)
※画像内のステータスという言葉は正しくはステートです。
今回は、AnimationController 内で攻撃ステートに遷移して、攻撃アニメーションを実行した後に、待機ステートに戻る設定と、その際に発生した警告について紹介します。
※ Unity のバージョンは 2021.3.25f1 です。3D キャラクターは Unity の無料アセット「Adventure Character」を使用しています。アニメーションは「Mixamo」から入手したものを使用しています。
待機アニメーションに戻す遷移の設定
前回、 Attacking パラメータのチェックボックスを操作して true にするとデフォルトの待機ステートから攻撃ステートに遷移する設定を行いました。
これだけでは、攻撃ステートのアニメーションが終わった後の遷移がないので、アニメーションが行われなくなります。
※ シーン再生時に Animator ウィンドウのステートの青いプログレッシブバーを表示するには、そのアニメーションを行っているゲームオブジェクト(例では Man_Full)を選択しておく必要があります。
※動画内のステータスという言葉は正しくはステートです。
そこで、攻撃のアニメーションが終わったら、待機ステートに戻るための、攻撃→待機の遷移を作成します。
前回同様、遷移元の攻撃ステートで右クリックして表示されたメニューで Make Transition を選択して、遷移先の待機ステートでクリックすると遷移を表す矢印付きの線で接続されます。
![Unity AnimationController 攻撃ステータスから待機ステータスへの遷移を作成します.](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-攻撃ステータスから待機ステータスへの遷移を作成します.png)
作成した遷移の線をクリックして Inspector で確認します。
既定の状態では、遷移先(例では「待機」)に遷移する条件はありません。
現在のアニメーション(例では「攻撃」)が完了する直前にわずかな時間を経て遷移先のアニメーション(例では「待機」)に移行します。
![Unity AnimationController の遷移を作成した直後は無条件でアニメーションの完了直前からわずかな期間で遷移先のアニメーションに変化します.](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-の遷移を作成した直後は無条件でアニメーションの完了直前からわずかな期間で遷移先のアニメーションに変化します-1024x558.png)
待機から攻撃への遷移では、 Attacking が true であるという条件を追加したり、即座にアニメーションを変えるために Has Exit Time を無効にしました。
しかし、今回の攻撃から待機へと戻る遷移では、無条件で Has Exit Time も有効にします。
Has Exit Time の設定により、攻撃アニメーションが指定の時間まで完了したら、遷移先の待機アニメーションに移り変わります。
※ シーン再生時に Animator ウィンドウのステートの青いプログレッシブバーを表示するには、そのアニメーションを行っているゲームオブジェクト(例では Man_Full)を選択しておく必要があります。
![Unity AnimationController の遷移で無条件でアニメーションが完了したら移る設定を追加することでデフォルトステートに戻るようになりました1/3](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-の遷移で無条件でアニメーションが完了したら移る設定を追加することでデフォルトステートに戻るようになりました1-1024x473.png)
![Unity AnimationController の遷移で無条件でアニメーションが完了したら移る設定を追加することでデフォルトステートに戻るようになりました2/3](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-の遷移で無条件でアニメーションが完了したら移る設定を追加することでデフォルトステートに戻るようになりました2-1024x473.png)
![Unity AnimationController の遷移で無条件でアニメーションが完了したら移る設定を追加することでデフォルトステートに戻るようになりました3/3](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimationController-の遷移で無条件でアニメーションが完了したら移る設定を追加することでデフォルトステートに戻るようになりました3-1024x473.png)
※動画内のステータスという言葉は正しくはステートです。
無条件の遷移で as Exit Time を無効にすると発生する警告
今回追加した「攻撃」→「待機」の遷移の設定では、アニメーションの一定時間の再生後に遷移先のアニメーションに移り変わっていく Has Exit Time の設定が重要でした。
これのおかげで、何もしなくてもアニメーションが完了したら、遷移先に移ることができました。
好奇心で、 Has Exit Time を無効にすると、以下のような警告が Console と遷移の設定を行う Inspector ウィンドウに表示されました。
![Unity AnimatorController の遷移の設定で無条件で HasExitTime を無効にすると発生する警告](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimatorController-の遷移の設定で無条件で-HasExitTime-を無効にすると発生する警告.png)
![Unity AnimatorController の遷移の設定で無条件で HasExitTime を無効にすると発生する警告(Inspectorウィンドウ内)](https://compota-soft.work/wp1/wp-content/uploads/2023/07/Unity-AnimatorController-の遷移の設定で無条件で-HasExitTime-を無効にすると発生する警告(Inspectorウィンドウ内).png)
翻訳してみると、条件が指定されず、 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 !
- Unity アセットストア – ゲーム制作のための最高のアセット
- Mixamo
- アニメーションパラメーター – Unity マニュアル
- アニメーション遷移 – Unity マニュアル
- HasExitTimeをfalseにすると、ステートが遷移しなくなる。
記事一覧 → Compota-Soft-Press
コメント