using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour {
public float ForwardPower = 30f;
private float forwardTime = 0f;
private bool isForwardSpeedUp = false;//跑
private bool isForwardGo = false;//走
private bool ForwardFirstClick = true;
private bool isForwardOver;//主要用于结束循环的变量
float[] ForwardTime = new float[2] { 0, 0 };
void FixedUpdate() {
forwardTime += Time.deltaTime;
isForwardOver = false;
if (!Input.GetKey(KeyCode.W)) {
isForwardSpeedUp = false;
isForwardGo = false;
if (ForwardFirstClick) {
ForwardTime[0] = 0f;
ForwardTime[1] = 0f;
}
}
if (Input.GetKeyDown(KeyCode.W)) {
CameraControl.Instance.m_Speed = 100f;
isForwardGo = true;
while (!isForwardOver) {
if (ForwardFirstClick) {
ForwardTime[0] = forwardTime;
ForwardFirstClick = false;
isForwardOver = true;
}
else {
ForwardTime[1] = forwardTime;
}
if (ForwardTime[1] - ForwardTime[0] < 0.5f && ForwardTime[1] - ForwardTime[0] > 0f) {
isForwardSpeedUp = true;
ForwardFirstClick = true;
isForwardOver = true;
print("SpeedUp");
}
else if (ForwardTime[1] - ForwardTime[0] >= 0.5f) {
ForwardFirstClick = true;
}
}
}
if (isForwardSpeedUp)
this.transform.position += this.transform.forward * -ForwardPower * Time.deltaTime * 2;
else if (isForwardGo)
this.transform.position += this.transform.forward * -ForwardPower * Time.deltaTime;
}
}
基本逻辑就是计算两次按下的时间差,主要的难点在于判断,还可以继续优化的,我这写得有点冗余了,仅供参考。