protected void Update()
        {
            if (!cart.CurrentTrack)
            {
                return;
            }

            var rot = transform.rotation;

            var distance = Vector3.Dot(cart.GetVelocityOnTrack(), cart.transform.forward) * Time.deltaTime;
            var angle    = distance / (2 * Mathf.PI * wheelRadius) * 360;

            rot = Quaternion.AngleAxis(angle, cart.transform.right) * rot;

            transform.rotation = rot;
        }
Beispiel #2
0
        public void FixedUpdate()
        {
            var speed = cart.GetVelocityOnTrack().magnitude;

            if (speed > maxSpeed)
            {
                speed = maxSpeed;
            }

            float intensityMod;

            if (!cart.CurrentTrack)
            {
                //When a cart comes off the track, fade to silent, don't just stop and cause popping.
                speed        = lastVelocity.magnitude;
                trackiness  *= .8f;
                intensityMod = trackiness;
            }
            else
            {
                trackiness   = 1;
                intensityMod = GetIntensityModifier();
            }


            //Debug.Log("Speed " + speed + " intensity mod " + intensityMod);

            foreach (var clipInfo in clips)
            {
                var speedIndex = speed / maxSpeed;

                if (clipInfo.volumeVsSpeed == null)
                {
                    clipInfo.GenerateCurve();
                }

                var volume = clipInfo.volumeVsSpeed.Evaluate(speedIndex);
                volume *= intensityMod;

                if (volume <= 0)
                {
                    if (clipInfo.currentSource)
                    {
                        clipInfo.currentSource.enabled = false;
                        clipInfo.currentSource         = null;
                    }
                    continue;
                }

                var source = clipInfo.currentSource ?? AllocSource();

                clipInfo.currentSource = source;
                source.clip            = clipInfo.clip;

                //determine pitch
                if (clipInfo.referenceSpeedPercent == 0 || clipInfo.speedScale == 0)
                {
                    source.pitch   = 1;
                    source.enabled = true;
                }
                else
                {
                    var m = clipInfo.speedScale;
                    var x = speed / (clipInfo.referenceSpeedPercent * maxSpeed);
                    var b = 1 - m;

                    source.pitch   = m * x + b;
                    source.enabled = source.pitch > 0;
                }

                source.volume = baseVolume * volume;

                if (source.enabled && !source.isPlaying)
                {
                    source.Play();
                }
            }
        }