前提・実現したいこと
現在、1週間くらい前に質問したアニメーションを指定した秒数まで逆再生して、指定した秒数分の逆再生が終わったら再生という事が出来ています。(最初の10秒間だけ)
今は最初の10秒間だけしかできないのは、case内でtimeにそれぞれ1,2,3,4,5をtime = 5;
(1例)と入れていますが、Debug.Logで見た感じ数が入っていないからです。
例えば6秒で押した場合
1,2,3,4,5,6...(ここで2秒カウントアップが止まる)...7,8,9,10,11,12,13.....
となってしまいます。
これを
1,2,3,4,5,6...(ここで2秒カウントアップが止まる)...4,5,6,7,8,9.....
とさせたいです。
発生している問題・エラーメッセージ
case内で変数に数を入れることができていないため、下の感じ(6秒で押したときの例)になってしまいます。
1,2,3,4,5,6...(ここで2秒カウントアップが止まる)...7,8,9,10,11,12,13.....
エラーメッセージ:なし
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ClockAnimation : MonoBehaviour 6{ 7 // Animatorを入れる変数 8 private Animator animator; 9 10 float time = 0.0f; // 時間を測る変数 11 float state = 0; // caseで管理するための時間を入れておく変数 12 float BackTime = 0.0f; // 戻る時間入れる変数(今は使っていない) 13 14 public GameObject Clock; 15 16 void Start() 17 { 18 // 砂時計のAnimatorにアクセスする 19 animator = GetComponent<Animator>(); 20 // Timerを呼び出し、その後は1秒毎に実行 21 InvokeRepeating(nameof(Timer), 0.0f, 1.0f); 22 // ↓今だけ 23 InvokeRepeating(nameof(DebugLog), 0.0f, 1.0f); 24 // 通常再生 25 Play(); 26 } 27 28 void Update() 29 { 30 //if (Input.GetKeyDown("joystick button 0")) 31 if (Input.GetKeyDown(KeyCode.K)) 32 { 33 FunctionPut(); 34 ClockCase(); 35 } 36 } 37 38 // timeの値確認用(今だけ) 39 void DebugLog() 40 { 41 Debug.Log(time); 42 } 43 44 // 時間を測る 45 void Timer() 46 { 47 time += 1; 48 } 49 50 // timeは1秒ごとに変わるのでstateに置き換えてcaseを処理する 51 void FunctionPut() 52 { 53 state = time; 54 } 55 56 public void ClockCase() 57 { 58 switch(state) 59 { 60 case 0: // 残り10秒 61 break; 62 case 1: // 残り9秒 63 break; 64 case 2: // 残り8秒 65 break; 66 case 3: // 残り7秒 67 break; 68 case 4: // 残り6秒 69 break; 70 case 5: // 残り5秒 71 Reverse(); 72 Invoke("Play", 1f); // 1秒後通常再生開始 73 state = 5; // 時間とstateを戻った時間に合わせる 74 time = 5; 75 break; 76 case 6: // 残り4秒 77 Reverse(); 78 Invoke("Play", 2f); // 2秒後通常再生開始 79 state = 4; // 時間とstateを戻った時間に合わせる 80 time = 4; 81 break; 82 case 7: // 残り3秒 83 Reverse(); 84 Invoke("Play", 4f); // 4秒後通常再生開始 85 state = 3; // 時間とstateを戻った時間に合わせる 86 time = 3; 87 break; 88 case 8: // 残り2秒 89 Reverse(); 90 Invoke("Play", 6f); // 6秒後通常再生開始 91 state = 2; // 時間とstateを戻った時間に合わせる 92 time = 2; 93 break; 94 case 9: // 残り1秒 95 Reverse(); 96 Invoke("Play", 8f); // 8秒後通常再生開始 97 state = 1; // 時間とstateを戻った時間に合わせる 98 time = 1; 99 break; 100 case 10: // 残り0秒 101 state = 10; // これでゲームオーバーなので10を入れる 102 time = 10; 103 break; 104 default: 105 break; 106 } 107 } 108 109 // 再生 110 public void Play() 111 { 112 animator.SetFloat("speed", 1.0f); 113 } 114 115 // 一時停止 116 public void Pause() 117 { 118 animator.SetFloat("speed", 0.0f); 119 } 120 121 // 逆再生 122 public void Reverse() 123 { 124 animator.SetFloat("speed", -1); 125 // ↑と↓どっちが良いか悩み中 126 //animator.SetFloat(Animator.StringToHash("speed"), -1); 127 //animator.Play("Death", 0, 1f); 128 } 129} 130 131 132
試したこと
変数に数を入れる用の関数を作って↓caseのInvokeの後に入れてみた。
→変わりませんでした。
C#
1void seven() 2 { 3 state = 3; 4 time = 3; 5 } 6 7 void eight() 8 { 9 state = 2; 10 time = 2; 11 } 12 13 void nine() 14 { 15 state = 1; 16 time = 1; 17 }
補足情報(FW/ツールのバージョンなど)
Unityのバージョン:2020.2.0b2.3094 Personal
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。