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

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

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

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

Unity

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

Q&A

0回答

778閲覧

SetBoolの遷移が上手くいかない

THETA97556919

総合スコア5

C#

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

Unity

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

0グッド

0クリップ

投稿2021/02/24 02:30

編集2022/01/12 10:55

前提・実現したいこと

Setboolでアニメーションを制御したい。

###バージョン
Unity 2020.2.0f1
macOS Catalina 10.15.7

発生している問題・エラーメッセージ

スクリプト内でSetBool("Animname", true)をしても該当のアニメーションに遷移されない。

該当のソースコード

######GameClear.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class GameClear : MonoBehaviour 6{ 7 private GameObject Player; //プレイヤーにアタッチされている(アニメーションの対象) 8 private Animator Clearanim; //アニメーター 9 public bool gameclear = false; //ゲームクリア管理用(クリア時にtrue) 10 private bool AnimFlag = true; //アニメを一度だけ再生するためのFlag 11 12 13 14 void Start() //プレイヤーについているアニメーターを取得 15 { 16 Player = GameObject.FindGameObjectWithTag("Player"); 17 Clearanim = Player.GetComponent<Animator>(); 18 19 } 20 21 void FixedUpdate() 22 { 23 if(gameclear) 24 { 25 if(AnimFlag) 26 { 27 Debug.Log("読めたよ"); //ここまで読まれていることは確認済み 28 Clearanim.SetBool("GameClear", true); //GameClearパラメータをtrueにする(問題の箇所) 29 AnimFlag = false; 30 } 31 } 32 } 33} 34

(以下追記)
######GameClear.cs(アニメーション挙動を確認できたバージョン)

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class GameClear : MonoBehaviour 6{ 7 private GameObject Player; //プレイヤーにアタッチされている(アニメーションの対象) 8 private Animator Clearanim; //アニメーター 9 public bool gameclear = false; //ゲームクリア管理用(クリア時にtrue) 10 private bool AnimFlag = true; //アニメを一度だけ再生するためのFlag 11 12 13 14 void Start() //プレイヤーについているアニメーターを取得 15 { 16 Player = GameObject.FindGameObjectWithTag("Player"); 17 Clearanim = Player.GetComponent<Animator>(); 18 Clearanim.SetBool("GameClear", true); //GameClearパラメータをtrueにする(問題の箇所) 19 20 } 21 22 void FixedUpdate() 23 { 24 if(gameclear) 25 { 26 if(AnimFlag) 27 { 28 Debug.Log("読めたよ"); //ここまで読まれていることは確認済み 29 AnimFlag = false; 30 } 31 } 32 } 33} 34

######SortieManager.cs(一部抜粋)

C#

1 [SerializeField] private GameClear gameClear; //GameCler.cs取得 2~ 3~ 4~ 5//敵の死亡処理 6 public void LostEnemy() 7 { 8 KillPoint++; //敵を倒した数を増やす 9 Debug.Log("KILLPOINT" + KillPoint); 10 if (KillPoint >= MaxEnemyNum) //倒した数が部隊の敵生成数を超えると 11 { 12 Debug.Log(FormationNum + "Sortie!"); 13 Debug.Log(FormationNum - 1 + "LastEnemyDie!"); 14 KillPoint = 0; //倒した数をリセット 15 StartCoroutine(WaitFormationSortie()); //次の部隊出撃 16 if(FormationNum >= 3) //最後の敵が倒されたら(部隊番号が最後の部隊番号+1を上回ったら) 17 { 18 gameClear.gameclear = true; //ここでgameclearフラグが立つ 19                          //ここ以外でのフラグへの操作はなし 20 Debug.Log("GameClear"); 21 } 22 } 23 }

試したこと

Animatorタブの遷移AnyState→GameClearをStartAnim→GameClearに変更したが、これといった変化はみられなかった。
Clearanim.SetBool("GameClear", true);Start()内に記述してみた。
**→上手くアニメーションに遷移できていることを確認。**パラメータもtrueになっており、プレイヤーの挙動も問題なかった。

Playerについているアニメーター
GameClearトランジション

###備考
コンソールへのエラーはなしです。スペルミスもよく確認しましたが、問題ないと思われます。

初心者ですので、どの情報が大事なものなのかよく分かりません。問題解決のために必要な情報が他にあれば教えていただきたいです。追記いたします。

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

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

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

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

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

tsuki01

2021/02/25 12:01 編集

Startメソッド内では動いている点と、ログが出力されている点からすると、切替えの処理は問題ないのかもしれませんね。 以下を試したら何か動きが変わったりしますか? ・アニメーションの遷移元を、「Any State」から「StartAnim」に変更してみる
THETA97556919

2021/02/25 12:16

アドバイスありがとうございます!試してみます。
THETA97556919

2021/02/25 12:24

試してみましたが、やはりアニメーション遷移ができていないようです。 GameClearパラメータにも変化がありませんでした。
tsuki01

2021/02/25 13:05 編集

変化なしだった様で失礼しました。 パッと思いついたものですが、追加で以下を確認したいです(解決に向かわなかったらすみません。。) 1、「gameclear」のフラグ値を更新している処理を、質問に追記して頂きたい   ※インスペクターから直接フラグ変更しているなら、その旨追記してください。 2、Startメソッド内に記述して動いた際のコードも追記して頂きたい(また、本当に動いたのかも再確認してください) 3、コンソールにエラーログらしきものが出力されてたりしないか 4、”GameClear”のスペルミスがないか(スクリプト内と、AnimationController内で)   ※一度動いてたという話しと、見た感じ間違ってなさそうなので無いとは思いますが念のため。
THETA97556919

2021/02/25 13:25

了解しました。早速情報の追加をいたします。ご協力に感謝します。
tsuki01

2021/02/25 15:34

確認と追記、ありがとうございました。 全く同じ環境ではありませんが、提示されたコードと似た様なAnimatorで検証したところ、こちらではアニメーションが動作しました。(GameClear.cs のみを使って確認) 問題の切り分けを行うために、”gameclear”のフラグ値をインスペクターから直接変更してみて、アニメーションが動作するかも確認してみてはいかがでしょうか。 ※”SortieManager.cs”は一旦使わずに、アニメーション切替処理が動くかを確認してみる。 これでも動作しなかったら、”GameClear.cs”スクリプト以外に原因があるということなので。 度々申し訳ありません。
THETA97556919

2021/02/25 16:20

なるほど、了解しました。 その切り替えを試してダメなようならば他のスクリプトにも視野を広げてもう一度じっくり考察してみます。
THETA97556919

2021/02/25 16:25

インスペクターから切り替えを試みましたが、依然動作はしませんでした。 もう一度考え直してみます。
tsuki01

2021/02/26 13:38

度々の検証ありがとうございます。 インスペクターからもダメだと、いよいよAnimationとFixUpdateの関係が影響してそうなのですが、パッと怪しい点が出せずです。。お力になれずすみません。 自分だったら、あとはAnimator内の”Settings”の詳細項目を確認したり、念のためSetBoolではなくSetTriggerによるアニメーション切替を試してみたりするかもです。 もしくは、全く別のアニメーションファイルを使ってみるとか。 ※SetTriggerの件は、過去に解決した人が居た様なので。 https://teratail.com/questions/77224
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問