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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

10018閲覧

「特定のAnimatorステートが再生中」という情報を取得したい

kosho206

総合スコア41

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

1クリップ

投稿2020/05/06 01:48

編集2020/05/08 03:24

特定のAnimatorステートが再生中の時のみ実行される処理を作りたいです。
そのために「特定のステートが再生中」という情報を取得したいです。

「Animator.GetCurrentAnimatorStateInfo」というコードを使えば、再生中のステートの名前やその再生時間が取得できる。ということはわかったのですが、具体的にどんな書式で書けば良いのかがわかりません。
わからないなりに、公式リファレンス
(https://docs.unity3d.com/ja/current/ScriptReference/Animator.GetCurrentAnimatorStateInfo.html)
にあったコードを真似して、以下のスクリプトを書きました。

if(Input.GetMouseButtonUp(0)) { Anim.SetTrigger("UnkoNage"); Anim.SetInteger("AnimIdx", (int)UnkomanAction.Idx.UnkoNage); } if(Anim.GetCurrentAnimatorStateInfo(0).IsName("UnkoNage")) { Debug.Log("あ"); }

ですが、"UnkoNage"ステートが再生中の時でもConsoleウィンドウにDebug.Logが表示されません。

「.IsName()」というコードは()内に書いたステートが再生中の時にtrueを返すもの。と認識しているのですが、この認識と上記のスクリプトでどこか間違っている個所はありますか?

イメージ説明

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

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

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

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

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

sakura_hana

2020/05/07 00:41

こちらを確認してください→https://teratail.com/help/question-tips 多分Animatorのステートのことだと思いますがその明記と、「unity animator 特定のステートが再生中」とかでとりあえずググってみてください。
sakura_hana

2020/05/07 06:49

そこまでいったなら「Animator.GetCurrentAnimatorStateInfo」でググればスクリプト例も出ると思いますが。 細かいですが「特定のステートを指定して」とはどう指定させたいのかにもよります(プログラムにベタ書きでいいのか、プレイヤーに選択させたいのか)。
kosho206

2020/05/07 07:26

スクリプト例で、GetCurrentAnimatorStateInfo.IsName("Jamp")というのが公式マニュアルにあったので、同じコードをif文の条件内に書いて実行してみたのですが、Debug.Log()で確認しても全く動きませんでした。 .IsNameの()内にステート名を書けば、「そのステートが再生中の時」という情報を得られると思ったのですが、上で書いた通りDebug.Logで確認しても動かなかったので、どう書いたら良いのかなと思い質問させていただきました。 「特定のステートを指定して」というのは、プログラムにベタ書きで指定したいです。
sakura_hana

2020/05/08 00:02 編集

https://docs.unity3d.com/ja/current/ScriptReference/Animator.GetCurrentAnimatorStateInfo.html このページのですか? エラーが無いという前提だと、 「m_Animator.GetCurrentAnimatorStateInfo(0).IsName("Jump")」これは 「0番レイヤー(デフォルトだとBase Layerという名前)の現在ステートがJumpステートだったらtrue」という意味なので、レイヤー番号が正しいか、ステート名のスペルが合っているか(大文字小文字含めて)、本当にJumpステートに入っているか等を再確認してください。 (そして今やったことを質問に追記してください。この部分は見ていない人もいます)
guest

回答1

0

自己解決

if文の位置を変えたら問題なく動くようになりました。
実はこの質問に書いたコード自体をswitch文内に書いていたのですが、それが原因でした。

投稿2020/05/09 07:54

kosho206

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問