質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

20600閲覧

HasExitTimeをfalseにすると、ステートが遷移しなくなる。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

2クリップ

投稿2017/01/27 16:02

編集2017/01/31 14:04

###前提・実現したいこと

HasExitTimeをfalseにすると、ステートが遷移しなくなる現象が起きて、
その原因が分かりません。

まず、HasExitTimeとは、

trueにするとモーションが終わるまで他のステートに遷移しなくなる。 falseにすると、モーションの途中でも他のステートに遷移する。

と理解しているのですが、これが間違っているのでしょうか?

###試したこと

イメージ説明

デフォルトのステートから、キーを押したら、Jumpアニメーションを行い、
終わったら、自動でデフォルトのステートに戻ることを意図したAnimatorを作成しました。

アニメーションパラメータに「New Trigger」というトリガーのパラメータを設け、

New Animation → Jump の遷移条件には、ConditionsでNew Triggerを指定。 Jump → New Animation の遷移条件には、Conditionsに何も指定しない。

また、キーを押した時のコードは下記のようになっています。

C#

1 void Update () { 2 if (Input.GetButtonDown ("Jump")) { 3 Animator animeData = this.gameObject.GetComponent<Animator>(); 4 animeData.SetTrigger ("New Trigger"); 5 } 6 }

こうすれば、キーを押すとJumpアニメーションを再生して、それが終わったら、
デフォルトのステートに戻るつもりだったのですが、

実際は、

[JumpからNew Animationの遷移]のHasExitTimeをtrue → 意図した通り、Jumpアニメーションが終わるとデフォルトのステートに戻る。 [JumpからNew Animationの遷移]のHasExitTimeをfalse → Jumpアニメーションが終わっても遷移しない。Jumpステートで停止。

となります。
HasExitTimeをfalseにすると、なぜ、Jumpステートで停止するのかがわかりません。

Jump → New Animation の遷移条件には、Conditionsに何も指定していないので、
HasExitTimeのtrue, falseに関係なく、Jumpステートが終わったら、
デフォルトのステートに戻るはずだと思っているのですが、何故でしょうか?

ご教授のほどお願いします。

###追記。
Jumpステートのアニメーションは、以下のような設定になっています。

Jumpステートのインスペクター
Jumpステートのインスペクター

Jumpのアニメーションクリップのインスペクター
Jumpのアニメーションクリップのインスペクター

JumpのAnimationビュー
JumpのAnimationビュー

###追記②。

よく見たら警告メッセージが出ていました。

警告文

zeta1978👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2017/01/30 07:06

Jumpステート(のクリップ)の設定で、ループがオンになっていますか?
退会済みユーザー

退会済みユーザー

2017/01/30 13:19

ご指摘ありがとうございます。ループに関して正確に理解していないかもしれませんが、Jumpのアニメーションクリップのインスペクターを見る限り、ループがオンになっている様子はありません。
guest

回答1

0

ベストアンサー

Unity マニュアル:アニメーション遷移を見るに、Conditionsに何も指定しない場合、HasExitTimeがfalseであると遷移が行われないようです。

  1. 指定されたタイミング(=Exit Time)に来た時、その時遷移条件(=Conditions)を満たしていたら、ステート遷移する。

→遷移条件を満たしていても指定されたタイミングになるまで遷移は行われない。
2. 遷移条件が無い(=Conditionsに何も指定しない)場合、指定されたタイミング(=Exit Time)に来たら、ステート遷移する。
→HasExitTimeを指定しない場合、いつまで経っても遷移しない。

投稿2017/01/31 00:47

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/31 16:35 編集

ご回答ありがとうございます。 指定したタイミングや、Conditionsの遷移に関して、下記のことは合っていますか? ・HasExitTimeがtrueのとき、指定したタイミング(ExitTime)を持つことになる。  HasExitTimeがfalseのとき、指定したタイミング(ExitTime)は持たない。(ExitTimeは指定されない。) ・HasExitTimeがfalseで、Conditionsの条件だけ指定されているとき、Conditionsの条件だけ満たせば遷移する。 また、Unityエディタをよく見たら、下記の警告メッセージが出ていました。 Transition needs at least one condition or an ExitTime to be valid, otherwise it will be ignored. これがご回答の冒頭で書かれていたことや2.に該当し、 「トランジションには、少なくとも1つの遷移条件(Conditions)を指定するか、もしくはHasExitTimeをtrueにしなければならない。  そうしないと、遷移されない。」 ということなんですね? また、さらに質問で恐縮なのですが、 自動で行って戻ってくる遷移(遷移して、遷移先のステートでそのアニメーションを1回行ったら、戻って来る遷移)をしたい場合、 (例えば、[Defaultステート] → [Jumpステート] → [Defaultステート] というアニメーションステートの遷移をしたい場合)、 今回のように、行きの遷移はトリガーのConditionsを指定してSetTriggerで行い、 戻りの遷移はConditionsを指定せずHasExitTimeをtrueにして自動で戻らせる処理にするのが、 1番スマートな方法でしょうか? (例えば他の方法で、行き帰りをBool値のture, falseのConditionsにして、SetBoolの遷移で書くと、コード量が長くなるので。)
sakura_hana

2017/02/02 07:45

確認事項についてはその通りです。 >自動で行って戻ってくる遷移をしたい 戻って来る際に条件が無いのなら、ご提示の方法が一番スマートだと思います。 ただジャンプの場合は「Jumpステート中、ExitTimeの前に着地したら?」などのパターンが考えられると思うので、そこはゲームの仕様やモーション内容に合わせて調整が必要かと思います。
退会済みユーザー

退会済みユーザー

2017/02/03 12:36

ご回答ありがとうございます。 ご確認ありがとうございます。 なるほど、Jumpステート中、ExitTimeの前に着地した場合なども考慮する必要がありますね。 遷移のいろいろな条件を理解することができました。 ご教授くださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問