回答編集履歴

1

別案追記

2020/07/09 07:58

投稿

sakura_hana
sakura_hana

スコア11425

test CHANGED
@@ -1,8 +1,6 @@
1
1
  一番楽なのはタイマー用の変数を設けることです。
2
2
 
3
- 「Xボタンを押している間、数秒間速度が変わる」のか「Xボタンを押した後(Xが押されっぱなしかに関わらず)数秒間速度が変わる」のかわかりませんが、とりあえず前者で
3
+ 「Xボタンを押している間、数秒間速度が変わる」場合
4
-
5
-
6
4
 
7
5
  ```C#
8
6
 
@@ -49,3 +47,71 @@
49
47
  イメージとしてこんな感じかと思います。
50
48
 
51
49
  どのタイミングでタイマーをクリアするか等は仕様に応じて変えてください。
50
+
51
+
52
+
53
+ ---
54
+
55
+
56
+
57
+ 「Xボタンを押した後(Xが押されっぱなしかに関わらず)数秒間速度が変わる」場合。
58
+
59
+ ```C#
60
+
61
+ public float run_time = 3.0f; //何秒間速度が変わるか
62
+
63
+ float timer; //時間カウント用変数
64
+
65
+ bool isAccel; //速度が変わっているかどうかフラグ
66
+
67
+
68
+
69
+ public float gravity = 20.0f;
70
+
71
+ public float speedZ = 30;
72
+
73
+ public float accel ; 60
74
+
75
+
76
+
77
+ // 時間カウント
78
+
79
+ if (Input.GetKeyDown(KeyCode.X) && !isAccel) { //タイマー開始
80
+
81
+ isAccel = true;
82
+
83
+ }
84
+
85
+ if (isAccel) timer += Time.deltaTime; //タイマー加算
86
+
87
+ if (isAccel && timer > run_time) { //タイマー終了
88
+
89
+ isAccel = false;
90
+
91
+ timer = 0.0f;
92
+
93
+ }
94
+
95
+
96
+
97
+ // 速度変化
98
+
99
+ if (Input.GetKey(KeyCode.X))
100
+
101
+ {
102
+
103
+ moveDirection.y -= gravityA * Time.deltaTime;
104
+
105
+ if (controller.isGrounded){
106
+
107
+ if (isAccel) { //タイマーチェック
108
+
109
+ moveDirection.z = accel;
110
+
111
+ }
112
+
113
+ }
114
+
115
+ }
116
+
117
+ ```