- Home /
Question by
$$anonymous$$ · Jul 28, 2019 at 12:51 AM ·
audioaudiosourcesmoothcar physicspitch
Gear sound changes smoothed!
Hi there! I need help with this car script ... I need the gear changes (in this case the sound),is be smoother, I explain: The sound of the marches, is very hard, that is, there is no softening in the change of the tone of the audio source (pitch).
Is there any way that the changes are smoothed? Thank you!
using UnityEngine;
using System.Collections;
public class CarSetup : MonoBehaviour {
public WheelCollider FrontLeftWheel;
public WheelCollider FrontRightWheel;
public float[] GearRatio;
public int CurrentGear;
public float MaxEngineRPM;
public float MinEngineRPM;
public float EngineRPM = 0.0f;
private float i = 0f;
public Texture Medidor;
public float SizeX;
public float SizeY;
public float PosX;
public float PosY;
public Texture Puntero;
private float IndicatorRPM;
public float WheelsRPM;
void Start () {
}
// Update is called once per frame
void FixedUpdate ()
{
WheelsRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm);
EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/1.8f * GearRatio[CurrentGear];
ShiftGears();
IndicatorRPM = (EngineRPM) * 0.05f;
GetComponent<AudioSource>().pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) + 0.2f;
if ( GetComponent<AudioSource>().pitch > 3.0f) {
GetComponent<AudioSource>().pitch = 3.0f;
}
}
void ShiftGears() {
// this funciton shifts the gears of the vehcile, it loops through all the gears, checking which will make
// the engine RPM fall within the desired range. The gear is then set to this "appropriate" value.
int AppropriateGear = CurrentGear;
if ( EngineRPM >= MaxEngineRPM ) {
for ( int i = 0; i < GearRatio.Length; i ++ ) {
if ( FrontLeftWheel.rpm * GearRatio [i] < MaxEngineRPM) {
AppropriateGear = i;
break;
}
}
CurrentGear = AppropriateGear;
}
if ( EngineRPM <= MinEngineRPM ) {
AppropriateGear = CurrentGear;
for ( int j = GearRatio.Length-1; j >= 0; j -- ) {
if ( FrontLeftWheel.rpm * GearRatio[j] > MinEngineRPM ) {
AppropriateGear = j;
break;
}
}
CurrentGear = AppropriateGear;
}
}
void OnGUI ()
{
GUI.DrawTexture (new Rect (Screen.width -PosX ,Screen.height -PosY,SizeX,SizeY), Medidor);
float Angulo = Mathf.Abs(IndicatorRPM) + 50 * 5/10;
GUIUtility.RotateAroundPivot (Angulo, new Vector2 (Screen.width -100, Screen.height -i));
GUI.DrawTexture (new Rect (Screen.width -200 ,Screen.height -100,200,200), Puntero);
}
}
Comment
Your answer
Follow this Question
Related Questions
car shifting smoothed. help! 0 Answers
Animate Audio Source Pitch/Speed in Timeline 0 Answers
Creating Audio Source for different pitch 0 Answers
How to derive pitch from spectrum data? 1 Answer
AudioSource pitch measurement unit 1 Answer