🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity

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

Q&A

解決済

1回答

7808閲覧

【Unity】アニメーションの切り替えがSetBoolでできない

nakamu

総合スコア82

C#

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

Unity

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

0グッド

0クリップ

投稿2019/11/19 03:55

編集2019/11/19 04:38

unityちゃんを走らせたりジャンプさせたいのですが、ずっとWaitのままでSetBoolを使っても切り替えができません。
GUI側の設定だと思うのですが、アニメーションを使うのが初めてでよくわかりません。

こちらを参照

イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.XR.ARFoundation; 6using UnityEngine.XR.ARSubsystems; 7 8[RequireCompotenent(typeof(ARRaycastManager))] 9public class FigureAR : MonoBehaviour 10{ 11 [SerializeField] 12 GameObject objectPrefab; 13 GameObject unitychan; 14 ARRaycastManager raycastManager; 15 // Animator コンポーネント 16 Animator animator; 17 bool flg = false; 18 bool runFlg = false; 19 bool jumpFlg = false; 20 Vector2 screenPos; 21 float rotateY; 22 23 // 設定したフラグの名前 24 private const string key_isRun = "isRun"; 25 private const string key_isJump = "isJump"; 26 27 // Start is called before the first frame update 28 void Start() 29 { 30 Debug.Log("スタート"); 31 raycastManager = GetComponent<ARRaycastManager>(); 32 } 33 34 // Update is called once per frame 35 void Update() 36 { 37 if (Input.touchCount > 0 && !flg) 38 { 39 var touch = Input.GetTouch(0); 40 var hitResults = new List<ARRaycastHit>(); 41 if (raycastManager.Raycast(touch.position, hitResults)) 42 { 43 animator = objectPrefab.GetComponent<Animator>(); 44 animator.runtimeAnimatorController = Resources.Load<RuntimeAnimatorController>("AnimController"); 45 unitychan = Instantiate(objectPrefab, hitResults[0].pose.position, Quaternion.identity); 46 flg = true; 47 } 48 } 49 50 } 51 52 public void runBtn() 53 { 54 Debug.Log("走るボタン"); 55 if (runFlg) 56 { 57 Debug.Log("走らない"); 58 // RunからWaitに遷移する 59 animator.SetBool(key_isRun, false); 60 runFlg = false; 61 } 62 else 63 { 64 Debug.Log("走る"); 65 // WaitからRunに遷移する 66 animator.SetBool(key_isRun, true); 67 runFlg = true; 68 } 69 } 70 71 public void jumpBtn() 72 { 73 if (jumpFlg) 74 { 75 // JumpからWait or Runに遷移する 76 animator.SetBool(key_isJump, false); 77 jumpFlg = false; 78 } 79 else 80 { 81 // Wait or RunからJumpに遷移する 82 animator.SetBool(key_isJump, true); 83 jumpFlg = true; 84 } 85 } 86} 87

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

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

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

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

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

guest

回答1

0

ベストアンサー

runBtnメソッドがこのコード上からだとどこからも呼ばれていません。
他の箇所から呼んでいますか?

また、ステートのWait->Run側の条件を確認して、Conditionsが正しく設定されているか確認してください。


Update内の処理をよく見てませんでした。
タップ時の処理ですが、これだとanimator変数に入っているAnimatorは元となるプレハブに付いているAnimatorであり、(シーン上に生成された)UnityちゃんのAnimatorではありません。
なのでステートフラグを切り替えても当然何も起こりません。(もっと言えばUnityちゃんには目的のRuntimeAnimatorControllerが付いていない)

unitychan = Instantiate(objectPrefab, hitResults[0].pose.position, Quaternion.identity);
animator = unitychan.GetComponent<Animator>();
animator.runtimeAnimatorController = Resources.Load<RuntimeAnimatorController>("AnimController");
このようにすると正常動作するのではないかと思います。

(ちなみに上記処理が行われない内にボタンを押すとanimator.SetBoolの所でエラーが起きるので適宜制御した方がいいかと思います)

投稿2019/11/19 04:29

編集2019/11/19 05:05
sakura_hana

総合スコア11427

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

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

nakamu

2019/11/19 04:40

画像追加致しました! onClickで両方とも設定しておりログも確認済みです。 関係あるかわかりませんが、下記が出ております。 (Filename: currently not available on il2cpp Line: -1) Invalid Layer Index '1'
sakura_hana

2019/11/19 05:06 編集

回答に追記しました。
nakamu

2019/11/19 05:14

おっしゃる通りで初歩的なミスでした! つい他に目がいってしまいました。 生成されたunityちゃんでうまくいきました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問