一番楽なのはタイマー用の変数を設けることです。
「Xボタンを押している間、数秒間速度が変わる」場合。
C#
1public float run_time = 3.0f; //何秒間速度が変わるか
2float timer; //時間カウント用変数
3
4public float gravity = 20.0f;
5public float speedZ = 30;
6public float accel ; 60
7
8 if (Input.GetKey(KeyCode.X))
9 {
10 moveDirection.y -= gravityA * Time.deltaTime;
11 if (controller.isGrounded){
12 if (timer < run_time) { //タイマーチェック
13 moveDirection.z = accel;
14 timer += Time.deltaTime; //タイマー加算
15 }
16 }
17 } else { //キーが離されていたら
18 timer = 0.0f; //タイマークリア
19 }
イメージとしてこんな感じかと思います。
どのタイミングでタイマーをクリアするか等は仕様に応じて変えてください。
「Xボタンを押した後(Xが押されっぱなしかに関わらず)数秒間速度が変わる」場合。
C#
1public float run_time = 3.0f; //何秒間速度が変わるか
2float timer; //時間カウント用変数
3bool isAccel; //速度が変わっているかどうかフラグ
4
5public float gravity = 20.0f;
6public float speedZ = 30;
7public float accel ; 60
8
9 // 時間カウント
10 if (Input.GetKeyDown(KeyCode.X) && !isAccel) { //タイマー開始
11 isAccel = true;
12 }
13 if (isAccel) timer += Time.deltaTime; //タイマー加算
14 if (isAccel && timer > run_time) { //タイマー終了
15 isAccel = false;
16 timer = 0.0f;
17 }
18
19 // 速度変化
20 if (Input.GetKey(KeyCode.X))
21 {
22 moveDirection.y -= gravityA * Time.deltaTime;
23 if (controller.isGrounded){
24 if (isAccel) { //タイマーチェック
25 moveDirection.z = accel;
26 }
27 }
28 }