void FixedUpdate() { // Get constant inputs if (!string.IsNullOrEmpty(accelAxis)) { vp.SetAccel(Input.GetAxis(accelAxis)); } if (!string.IsNullOrEmpty(brakeAxis)) { vp.SetBrake(Input.GetAxis(brakeAxis)); } if (!string.IsNullOrEmpty(steerAxis)) { vp.SetSteer(Input.GetAxis(steerAxis)); } if (!string.IsNullOrEmpty(ebrakeAxis)) { vp.SetEbrake(Input.GetAxis(ebrakeAxis)); } if (!string.IsNullOrEmpty(boostButton)) { vp.SetBoost(Input.GetButton(boostButton)); } if (!string.IsNullOrEmpty(pitchAxis)) { vp.SetPitch(Input.GetAxis(pitchAxis)); } if (!string.IsNullOrEmpty(yawAxis)) { vp.SetYaw(Input.GetAxis(yawAxis)); } if (!string.IsNullOrEmpty(rollAxis)) { vp.SetRoll(Input.GetAxis(rollAxis)); } if (!string.IsNullOrEmpty(upshiftButton)) { vp.SetUpshift(Input.GetAxis(upshiftButton)); } if (!string.IsNullOrEmpty(downshiftButton)) { vp.SetDownshift(Input.GetAxis(downshiftButton)); } }
void FixedUpdate() { if (setter) { accelerationDelta = Input.acceleration - accelerationPrev; accelerationPrev = Input.acceleration; vp.SetAccel(setter.accel); vp.SetBrake(setter.brake); vp.SetEbrake(setter.ebrake); vp.SetBoost(setter.boost); if (useAccelerometer) { vp.SetSteer((Input.acceleration.x + accelerationDelta.x * deltaFactor) * steerFactor); vp.SetYaw(Input.acceleration.x * flipFactor); vp.SetPitch(-Input.acceleration.z * flipFactor); } else { vp.SetSteer(setter.steer); } } }
void FixedUpdate() { if (target) { if (target != targetPrev) { InitializeTarget(); } targetPrev = target; //Is the target a waypoint? targetIsWaypoint = target.GetComponent <VehicleWaypoint>(); //Can I see the target? targetVisible = !Physics.Linecast(tr.position, target.position, viewBlockMask); if (targetVisible || targetIsWaypoint) { targetPoint = targetBody ? target.position + targetBody.velocity : target.position; } if (targetIsWaypoint) { //if vehicle is close enough to target waypoint, switch to the next one if ((tr.position - target.position).sqrMagnitude <= targetWaypoint.radius * targetWaypoint.radius) { target = targetWaypoint.nextPoint.transform; targetWaypoint = targetWaypoint.nextPoint; prevSpeed = speed; speed = Mathf.Clamp01(targetWaypoint.speed * initialSpeed); brakeTime = prevSpeed / speed; if (brakeTime <= 1) { brakeTime = 0; } } } brakeTime = Mathf.Max(0, brakeTime - Time.fixedDeltaTime); //Is the distance to the target less than the follow distance? close = (tr.position - target.position).sqrMagnitude <= Mathf.Pow(followDistance, 2) && !targetIsWaypoint; dirToTarget = (targetPoint - tr.position).normalized; lookDot = Vector3.Dot(vp.forwardDir, dirToTarget); steerDot = Vector3.Dot(vp.rightDir, dirToTarget); //Attempt to reverse if vehicle is stuck stoppedTime = Mathf.Abs(vp.localVelocity.z) < 1 && !close && vp.groundedWheels > 0 ? stoppedTime + Time.fixedDeltaTime : 0; if (stoppedTime > stopTimeReverse && reverseTime == 0) { reverseTime = reverseAttemptTime; reverseAttempts++; } //Reset if reversed too many times if (reverseAttempts > resetReverseCount && resetReverseCount >= 0) { StartCoroutine(ReverseReset()); } reverseTime = Mathf.Max(0, reverseTime - Time.fixedDeltaTime); if (targetVelocity > 0) { speedLimit = Mathf.Clamp01(targetVelocity - vp.localVelocity.z); } else { speedLimit = 1; } //Set vehicle inputs vp.SetAccel(!close && (lookDot > 0 || vp.localVelocity.z < 5) && vp.groundedWheels > 0 && reverseTime == 0 ? speed * speedLimit : 0); vp.SetBrake(reverseTime == 0 && brakeTime == 0 && !(close && vp.localVelocity.z > 0.1f) ? (lookDot < 0.5f && lookDot > 0 && vp.localVelocity.z > 10 ? 0.5f - lookDot : 0) : (reverseTime > 0 ? 1 : (brakeTime > 0 ? brakeTime * 0.2f : 1 - Mathf.Clamp01(Vector3.Distance(tr.position, target.position) / Mathf.Max(0.01f, followDistance))))); vp.SetSteer(reverseTime == 0 ? Mathf.Abs(Mathf.Pow(steerDot, (tr.position - target.position).sqrMagnitude > 20 ? 1 : 2)) * Mathf.Sign(steerDot) : -Mathf.Sign(steerDot) * (close ? 0 : 1)); vp.SetEbrake((close && vp.localVelocity.z <= 0.1f) || (lookDot <= 0 && vp.velMag > 20) ? 1 : 0); } rolledOverTime = va.rolledOver ? rolledOverTime + Time.fixedDeltaTime : 0; //Reset if stuck rolled over if (rolledOverTime > rollResetTime && rollResetTime >= 0) { StartCoroutine(ResetRotation()); } }