コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }