void FixedUpdate() { if (null != rotorSound) { float rotorPitch = rotorRotator.getRotorSpeed() / 100.0f; float rotorVolume = Mathf.Max(0, rotorRotator.getRotorSpeed() / 100.0f - 0.4f); rotorSound.pitch = rotorPitch; rotorSound.volume = rotorVolume; } if (null != engineSound) { float realEngineSpeed = engineController.getEngineSpeed(); bool increasingSpeed = realEngineSpeed > heardEngineSpeed; if (increasingSpeed) { heardEngineSpeed = Mathf.Lerp(heardEngineSpeed, realEngineSpeed < 0.1f ? 0 : realEngineSpeed, 1.0f * Time.fixedDeltaTime); } else { heardEngineSpeed = Mathf.Lerp(heardEngineSpeed, realEngineSpeed < 0.1f ? 0 : realEngineSpeed, 0.2f * Time.fixedDeltaTime); } float enginePitch = 0.5f + heardEngineSpeed / 100.0f / 2; float engineVolume = heardEngineSpeed / 100.0f; engineSound.pitch = enginePitch; engineSound.volume = engineVolume; } }
void Update() { // Raw rotor speed is engine speed (in percent) calculatedRotorSpeed = engineController.getEngineSpeed(); bool increasingSpeed = calculatedRotorSpeed > actualRotorSpeed; // Apply filter if (increasingSpeed) { actualRotorSpeed = Mathf.Lerp(actualRotorSpeed, calculatedRotorSpeed, Time.deltaTime * rotorSpeedIncreadingDamping); } else { actualRotorSpeed = Mathf.Lerp(actualRotorSpeed, calculatedRotorSpeed, Time.deltaTime * rotorSpeedDecreasingDamping); } // Rotate transforms if (null != mainRotor) { mainRotor.Rotate(HelicopterSetup.axes.X == mainRotorRotationAxis ? actualRotorSpeed / 100f * hundredPercentMainRotorSpeed * Time.deltaTime : 0f, HelicopterSetup.axes.Y == mainRotorRotationAxis ? actualRotorSpeed / 100f * hundredPercentMainRotorSpeed * Time.deltaTime : 0f, HelicopterSetup.axes.Z == mainRotorRotationAxis ? actualRotorSpeed / 100f * hundredPercentMainRotorSpeed * Time.deltaTime : 0f, Space.Self); } if (null != tailRotor) { tailRotor.Rotate(HelicopterSetup.axes.X == tailRotorRotationAxis ? actualRotorSpeed / 100f * hundredPercentTailRotorSpeed * Time.deltaTime : 0f, HelicopterSetup.axes.Y == tailRotorRotationAxis ? actualRotorSpeed / 100f * hundredPercentTailRotorSpeed * Time.deltaTime : 0f, HelicopterSetup.axes.Z == tailRotorRotationAxis ? actualRotorSpeed / 100f * hundredPercentTailRotorSpeed * Time.deltaTime : 0f, Space.Self); } }
void FixedUpdate() { // Compute and apply forces processMainRotorForces(rotorEfficiency()); processPedalsForces(); processPendulumTorques(); // Compute rotor speed (displayed on PFD) float desiredRotorSpeed = 0.0f; if (desiredLift - actualLift >= 0.0f && !Mathf.Approximately(0, desiredLift)) { // If lift increases, the rotor needs more power and its speed will momentarily be reduced. desiredRotorSpeed = (engineController.getEngineSpeed() / 100.0f) * (1 - (desiredLift - actualLift) / desiredLift * rotorSpeedChangeFactor) * 100.0f; } else if (!Mathf.Approximately(0, actualLift)) { // If lift decreases, the rotor needs less power and its speed will momentarily be increased. desiredRotorSpeed = (engineController.getEngineSpeed() / 100.0f) * (1 - (desiredLift - actualLift) / actualLift * rotorSpeedChangeFactor) * 100.0f; } // Apply filter on rotor speed actualRotorSpeed = Mathf.Lerp(actualRotorSpeed, desiredRotorSpeed, rotorSpeedDamping * Time.fixedDeltaTime); }