前提・実現したいこと
Unityで入力したらアニメーションが指定した時間まで逆再生し、その指定した時間まで逆再生が完了したら再生を逆再生が完了した位置からまた始まるという処理をしたいです。
処理例:制限時間10秒の時9,8,7,6.....とカウントダウンしていく(このカウントダウンアニメーションはできている)、この時に残り時間2秒でボタンを押したら、押した2秒から3,4,5,6,7,8と逆再生する。そして8秒からまた通常の再生が始まる。
例:(制限時間(10秒) - 押したときの時間(2秒) = 逆再生の終わる時間(8秒))
現在、ボタンを押して逆再生はできている。指定した時間(秒数)で逆再生から再生に変えるという処理ができていない。
発生している問題・エラーメッセージ
入力によって逆再生、再生、一時停止(これはいらない)をできるようにはしました。そこから指定した時間まで逆再生という所が上手くいきません。
エラーメッセージ:なし
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class CountController : MonoBehaviour 6{ 7 // Animatorを入れる変数 8 private Animator animator; 9 private float BackTime = 0.0f; // 戻る時間 10 private float NowTime = 10.0f; // 今の時間 11 private float n = 10.0f; // ループ用変数 12 public float time = 10.0f; // 全体の時間 13 14 private float i = 2.0f; 15 16 void Start() 17 { 18 // カウントのAnimatorにアクセスする 19 animator = GetComponent<Animator>(); 20 Play(); 21 } 22 23 void FixedUpdate() 24 { 25 // ボタンを押す前までの時間を保持 26 NowTime -= Time.deltaTime; 27 28 //if (NowTime >= 3.0f) 29 //{ 30 // Play(); 31 //} 32 33 //if (NowTime >= 7.0f) 34 //{ 35 // Reverse(); 36 // NowTime = 0.0f; 37 //} 38 39 if (Input.GetKeyDown("joystick button 0")) 40 { 41 ReversePlay(); 42 } 43 } 44 45 // 再生 46 public void Play() 47 { 48 animator.SetFloat(Animator.StringToHash("countdown"), 1); 49 } 50 51 // 一時停止 52 public void Pause() 53 { 54 animator.SetFloat(Animator.StringToHash("countdown"), 0); 55 } 56 57 // 逆再生 58 public void Reverse() 59 { 60 animator.SetFloat(Animator.StringToHash("countdown"), -1); 61 } 62 63 // 変数を入れる 64 public void PutFunction() 65 { 66 BackTime = NowTime; 67 } 68 69 70 // カウントダウンが指定秒数だけカウントアップし、またカウントダウンする 71 public void ReversePlay() 72 { 73 // 今の時間が5秒未満なら指定秒数だけカウントアップ 74 if (NowTime < 5.0f) 75 { 76 // 押した時間の保持 77 PutFunction(); 78 // ループ用変数を再初期化する(2回目やった時バグらないように) 79 n = 10.0f; 80 81 // 戻る秒数を減らしていって、戻る秒数が1以上なら逆再生。0になったら再生する 82 for (n = 10; n > BackTime; n -= Time.deltaTime) 83 { 84 if (n == BackTime) 85 { 86 break; 87 } 88 // ループ中は逆再生 89 Reverse(); 90 } 91 // 今の時間を測る関数に今の時間を渡す 92 NowTime = Time - BackTime; 93 // ループを抜けたら再生 94 Play(); 95 } 96 } 97 98} 99
試したこと
・コメントアウトしてある部分でちゃんと時間は測れて、逆再生、再生を繰り返しているかの確認。(これはちゃんとできていました)
・逆再生の方法を↓に変えてみる(変わりませんでした)
C#
1Animator animator = GetComponent<Animator> (); 2animator.speed = -1;
・フローチャート(↓)を書いて流れを確認しながらコードを書く。(~~できませんでした。~~書き方が下手なんでしょうね)
◎ボタンが押されたか
〇今の制限時間は5秒未満か
・押したときの時間を保持(例:2秒)
*制限時間 - 押したときの時間(例・10 - 2 = 8 →8秒までループ) の時間だけループ
・ループ中はずっと逆再生
*
・ループを抜けたら再生
〇
◎
補足情報(FW/ツールのバージョンなど)
Unityのバージョン:Unity2020.2.0b2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。