private float maxSpeed = 10f; // 最大速度
private float acceleration = 8f; // 加速度
private float deceleration = 8f; // 减速度
private float currentSpeed = 0f; // 当前速度
private float distanceToTarget; // 车辆与目标位置的距离
private bool isMoving = false; // 是否正在移动
private Vector3 startPosition; // 起始位置
private float startTime; // 开始时间
public void SetCarMovement()
{
if (isMoving)
{
distanceToTarget = Vector3.Distance(transform.localPosition,目标位置);
if (distanceToTarget<=0.1f)
{
transform.localPosition =目标位置;
isMoving = false;
return;
}
// 计算当前移动时间
float currentTime = Time.time - startTime;
// 计算加速段、匀速段和减速段的时间
float accelerationTime = maxSpeed / acceleration;
float decelerationTime = maxSpeed / deceleration;
float uniformTime = (distanceToTarget - accelerationTime*accelerationTime / 2 - decelerationTime*decelerationTime / 2) / maxSpeed;
// 根据时间和距离计算当前速度
if (currentTime < accelerationTime)
{
// 加速段
currentSpeed = Mathf.Lerp(0f, maxSpeed, currentTime / accelerationTime);
}
else if (currentTime < accelerationTime + uniformTime)
{
// 匀速段
currentSpeed = maxSpeed;
}
else
{
// 减速段
currentSpeed = Mathf.Lerp(maxSpeed, 0f, (currentTime - accelerationTime - uniformTime) / decelerationTime);
}
Vector3 direction = (GetVatPos(targetIndex) - startPosition).normalized;
transform.Translate(direction * currentSpeed * Time.deltaTime);
}
}
public void StartMoving()
{
//Debug.Log("开始运动");
isMoving = true;
startTime = Time.time;
startPosition = transform.localPosition;
distanceToTarget = Vector3.Distance(startPosition, 目标位置);
}