teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

別案追記

2020/07/09 07:58

投稿

sakura_hana
sakura_hana

スコア11429

answer CHANGED
@@ -1,6 +1,5 @@
1
1
  一番楽なのはタイマー用の変数を設けることです。
2
- 「Xボタンを押している間、数秒間速度が変わる」のか「Xボタンを押した後(Xが押されっぱなしかに関わらず)数秒間速度が変わる」のかわかりませんが、とりあえず前者で
2
+ 「Xボタンを押している間、数秒間速度が変わる」場合
3
-
4
3
  ```C#
5
4
  public float run_time = 3.0f; //何秒間速度が変わるか
6
5
  float timer; //時間カウント用変数
@@ -23,4 +22,38 @@
23
22
  }
24
23
  ```
25
24
  イメージとしてこんな感じかと思います。
26
- どのタイミングでタイマーをクリアするか等は仕様に応じて変えてください。
25
+ どのタイミングでタイマーをクリアするか等は仕様に応じて変えてください。
26
+
27
+ ---
28
+
29
+ 「Xボタンを押した後(Xが押されっぱなしかに関わらず)数秒間速度が変わる」場合。
30
+ ```C#
31
+ public float run_time = 3.0f; //何秒間速度が変わるか
32
+ float timer; //時間カウント用変数
33
+ bool isAccel; //速度が変わっているかどうかフラグ
34
+
35
+ public float gravity = 20.0f;
36
+ public float speedZ = 30;
37
+ public float accel ; 60
38
+
39
+ // 時間カウント
40
+ if (Input.GetKeyDown(KeyCode.X) && !isAccel) { //タイマー開始
41
+ isAccel = true;
42
+ }
43
+ if (isAccel) timer += Time.deltaTime; //タイマー加算
44
+ if (isAccel && timer > run_time) { //タイマー終了
45
+ isAccel = false;
46
+ timer = 0.0f;
47
+ }
48
+
49
+ // 速度変化
50
+ if (Input.GetKey(KeyCode.X))
51
+ {
52
+ moveDirection.y -= gravityA * Time.deltaTime;
53
+ if (controller.isGrounded){
54
+ if (isAccel) { //タイマーチェック
55
+ moveDirection.z = accel;
56
+ }
57
+ }
58
+ }
59
+ ```