Pause, Play and Rewind Buttons?

Hey guys, read the bottom of this question for the question concerning the buttons

i’m working on my dashboard project in weeks now and what really gets me out of my mind is the scripting i need to do for my dashboard’s needles to display the values by rotating… i’ve been on this script since quite a while but i can’t seem to figure out neither the problem nor the solution.

Here’s my code :

var Source : TextAsset;
var ZeigerSpeed : GameObject;
var ZeigerRPM   : GameObject;
var ZeigerHitze : GameObject;
var DisplaySpeed : GUIText;
var DisplayRPM : GUIText;
var DigitalSpeed = 0;
var DigitalRPM = 0;
var DrehungSpeed = 0.0;
var DrehungRpm = 0.0;
var DrehungHitze = 0.0;

var DrehungSpeed_alt = 0.0;
var DrehungRpm_alt = 0.0;
var DrehungHitze_alt = 0.0;

function Dashboard()
{
    var lines = Source.text.Split("

“[0]);
for(var i = 4; i < lines.Length; i++)
{
DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;
var values = lines*.Split(”;"[0]);*
DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
DigitalSpeed = int.Parse(values[4]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);
yield WaitForSeconds(0.1);
DigitalRPM = int.Parse(values[8]);

}
}

function OnGUI(){

  • GUI.Button(Rect(10,10,50,50),“Play”); //function?*
  • GUI.Button(Rect(10,70,50,50),“Pause”);*
  • GUI.Button(Rect(10,130,70,50),“Rewind”);*
    }
    function Start()
    {
    Dashboard();
    }

function Update()
{
ZeigerSpeed.transform.rotation = Quaternion.Lerp(ZeigerSpeed.transform.rotation,Quaternion.Euler(0,0,DrehungSpeed),Time.deltaTime);
ZeigerRPM.transform.rotation = Quaternion.Lerp(ZeigerRPM.transform.rotation,Quaternion.Euler(0,0,DrehungRpm),Time.deltaTime);
//ZeigerHitze.transform.rotation = Quaternion.Lerp(ZeigerHitze.transform.rotation,Quaternion.Euler(0,0,DrehungHitze),Time.deltaTime); //No algorithm yet

  • DisplaySpeed.text = DigitalSpeed.ToString(“000 km/h”);*
  • DisplayRPM.text = DigitalRPM.ToString(“0000 RPM”);*
    }

I apologize for some of the names being german, but i think you can figure out what i’m trying to do.
i highly appreciate any help.
:slight_smile:
PS: If you don’t get something because it’s in german, ask me and i’ll translate for you
EDIT : Some very butthurt people might see this as a duplicate. closing my old question
MORE EDIT
I also want to display the numeric speed value in some kind of LCD display…i need to know if i can just render the text somewhere and make it update…is that possible?
if so, how is it possible?
EVEN MORE EDIT :
Thanks for all the help and support, i have one more question :
I want to create Start, Pause and Rewind Buttons…
is it Possible to pause, start and rewind my function using a GUIButton?
EDIT : Got the buttons done myself, now i just need to know how to actually make them start, pause and rewind
Edit : Script here
function Dashboard()
{
var lines = Source.text.Split("
"[0]);

for(var i = 4; i < lines.Length; i++)
{
DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;
var values = lines*.Split(“;”[0]);*
DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
DigitalSpeed = int.Parse(values[4]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);
yield WaitForSeconds(0.1);
DigitalRPM = int.Parse(values[8]);
if(Paused == true)
{
* break;*
}

}
}

function OnGUI(){

* if(GUI.Button(Rect(10,10,50,50),“Play”))*
* {*
* Dashboard();*
* }*
* if(GUI.Button(Rect(10,70,50,50),“Pause”))*
* {*
* Paused = true;*
* }*

* GUI.Button(Rect(10,130,70,50),“Rewind”);*
}
UPDATE : New Script here, killing me as usual
var Source : TextAsset;
var ZeigerSpeed : GameObject;
var ZeigerRPM : GameObject;
var ZeigerHitze : GameObject;
var DisplaySpeed : GUIText;
var DisplayRPM : GUIText;
var DigitalSpeed = 0;
var DigitalRPM = 0;
var DrehungSpeed = 0.0;
var DrehungRpm = 0.0;
var DrehungHitze = 0.0;

var Paused : boolean = false;

var DrehungSpeed_alt = 0.0;
var DrehungRpm_alt = 0.0;
var DrehungHitze_alt = 0.0;

var counter =4;

var i;

function Dashboard()
{
var lines = Source.text.Split("
"[0]);

for(i = counter; i < lines.Length; counter++)
{
DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;
var values = lines*.Split(“;”[0]);*
DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
DigitalSpeed = int.Parse(values[4]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);
yield WaitForSeconds(0.1);
DigitalRPM = int.Parse(values[8]);

* if(Paused == true)*
* {*
* counter = i;*
* break;*

* }*

}
}

function OnGUI(){

* if(GUI.Button(Rect(10,10,50,50),“Play”))*
* {*
* Dashboard();*
* }*
* if(GUI.Button(Rect(10,70,50,50),“Pause”))*
* {*
* if(Paused == false) Paused = true;*
* else*
* Paused=false;*
* Dashboard();*

* }*

* GUI.Button(Rect(10,130,70,50),“Rewind”);*

* GUI.Box(Rect(0,1080,Screen.width,Screen.height/4.0),"Zeilennummer : " + i + "
" + "Geschwindigkeit : " + DigitalSpeed + "
" + "Umdrehungen Pro Minute : " + DigitalRPM + "
");*

}
function Start()
{

}

function Update()
{

ZeigerSpeed.transform.rotation = Quaternion.Lerp(ZeigerSpeed.transform.rotation,Quaternion.Euler(0,0,DrehungSpeed),Time.deltaTime*1.5);
ZeigerRPM.transform.rotation = Quaternion.Lerp(ZeigerRPM.transform.rotation,Quaternion.Euler(0,0,DrehungRpm),Time.deltaTime);
//ZeigerHitze.transform.rotation = Quaternion.Lerp(ZeigerHitze.transform.rotation,Quaternion.Euler(0,0,DrehungHitze),Time.deltaTime); //No algorithm yet
* DisplaySpeed.text = DigitalSpeed.ToString(“000 km/h”);*
* DisplayRPM.text = DigitalRPM.ToString(“0000 RPM”);*
}
UPDATE : Play and Pause buttons are working! i’m just missing rewind now! posting my script!
var Source : TextAsset;
var ZeigerSpeed : GameObject;
var ZeigerRPM : GameObject;
var ZeigerHitze : GameObject;
var DisplaySpeed : GUIText;
var DisplayRPM : GUIText;
var DigitalSpeed = 0;
var DigitalRPM = 0;
var DrehungSpeed = 0.0;
var DrehungRpm = 0.0;
var DrehungHitze = 0.0;

var Paused : boolean = false;

var DrehungSpeed_alt = 0.0;
var DrehungRpm_alt = 0.0;
var DrehungHitze_alt = 0.0;

var counter =4;

var i = 4;

function Dashboard()
{
var lines = Source.text.Split("
"[0]);

for(i = counter; i < lines.Length; i++)
{

DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;
var values = lines*.Split(“;”[0]);*
DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
DigitalSpeed = int.Parse(values[4]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);
yield WaitForSeconds(0.1);
DigitalRPM = int.Parse(values[8]);
* counter = i;*
* if(Paused == true)*
* {*

* break;*

* }*

}
}

function OnGUI(){

* if(GUI.Button(Rect(10,10,50,50),“Play”))*
* {*
* Dashboard();*
* }*
* if(GUI.Button(Rect(10,70,50,50),“Pause”))*
* {*
* if(Paused == false) Paused = true;*
* else*
* Paused=false;*
* Dashboard();*

* }*

* GUI.Button(Rect(10,130,70,50),“Rewind”);*

* GUI.Box(Rect(0,1080,Screen.width,Screen.height/4.0),"Zeilennummer : " + i + "
" + "Geschwindigkeit : " + DigitalSpeed + "
" + "Umdrehungen Pro Minute : " + DigitalRPM + "
");*

}
function Start()
{

}

UPDATE : New script trying to get the buttons “first value” and “last value” done!

var Source : TextAsset;
var ZeigerSpeed : GameObject;
var ZeigerRPM : GameObject;
var ZeigerHitze : GameObject;
var DisplaySpeed : GUIText;
var DisplayRPM : GUIText;
var DigitalSpeed = 0;
var DigitalRPM = 0;
var DrehungSpeed = 0.0;
var DrehungRpm = 0.0;
var DrehungHitze = 0.0;

var Paused : boolean = false;
var Rewinding : boolean = false;
var ErsterWert : boolean = false;
var LetzterWert : boolean = false;

var DrehungSpeed_alt = 0.0;
var DrehungRpm_alt = 0.0;
var DrehungHitze_alt = 0.0;

var counter =4;

var i = 4;

function Dashboard()
{
var lines = Source.text.Split("
"[0]);

for(i = counter; i < lines.Length; i++)
{

DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;
var values = lines*.Split(“;”[0]);*
DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
DigitalSpeed = int.Parse(values[4]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);

DigitalRPM = int.Parse(values[8]);
* yield WaitForSeconds(1.0);*
* counter = i;*
* if(Paused == true)*
* {*
* Rewinding = false;*
* ErsterWert = false;*
* LetzterWert = false;*
* break;*

* }*

* if(Rewinding == true)*
* {*
* Paused = false;*
* ErsterWert = false;*
* LetzterWert = false;*
* for(i = counter; i > 4; i–)*
* {*

values = lines*.Split(“;”[0]);*
DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;

DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
DigitalSpeed = int.Parse(values[4]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);

DigitalRPM = int.Parse(values[8]);
* yield WaitForSeconds(1.0);*
* counter = i;*

* }*

}

* if(ErsterWert == true)*
* {*
* Paused = false;*
* Rewinding = false;*
* LetzterWert = false;*

* values = lines[4].Split(“;”[0]);*
* DrehungSpeed = int.Parse(values[4]);*
* DrehungRpm = int.Parse(values[8]);*
* DigitalSpeed = int.Parse(values[4]);*
* //DrehungHitze = int.Parse(values[XXXX]);*
_ DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);_

* DigitalRPM = int.Parse(values[8]);*
* yield WaitForSeconds(1.0);*
* }*

* if(LetzterWert == true)*
* {*
* Paused = false;*
* Rewinding = false;*
* ErsterWert = false;*

* var endwert = lines.length - 1.0;*

* values = lines[endwert].Split(“;”[0]);*
* DrehungSpeed = int.Parse(values[4]);*
* DrehungRpm = int.Parse(values[8]);*
* DigitalSpeed = int.Parse(values[4]);*
* //DrehungHitze = int.Parse(values[XXXX]);*
_ DrehungSpeed = Mathf.Clamp(DrehungSpeed/300.0 * 180.0,0.0,180.0);
DrehungRpm = Mathf.Clamp(DrehungRpm/8000.0 * 240.0,0.0,240.0);_

* DigitalRPM = int.Parse(values[8]);*
* yield WaitForSeconds(1.0);*

* }*

}
}
function OnGUI(){

* if(GUI.Button(Rect(10,10,50,50),“Play”))*

* {*

* Dashboard();*

* }*

* if(GUI.Button(Rect(10,70,50,50),“Pause”))*

* {*
* if(Paused == false) Paused = true;*
* else*
* Paused=false;*
* Dashboard();*

* }*

* if(GUI.Button(Rect(10,130,70,50),“Rewind”))*
* {*
* Rewinding = true;*
* }*

* if(GUI.Button(Rect(10,190,100,50),“Erster Wert”))*
* {*
* ErsterWert = true;*
* }*

* if(GUI.Button(Rect(10,250,100,50),“Letzter Wert”))*
* {*
* LetzterWert = true;*
* }*

* GUI.Box(Rect(0,1080,Screen.width,Screen.height/4.0),"Zeilennummer : " + i + "
" + "Geschwindigkeit : " + DigitalSpeed + "
" + "Umdrehungen Pro Minute : " + DigitalRPM + "
");*

}
function Start()
{

}

function Update()
{

ZeigerSpeed.transform.rotation = Quaternion.Lerp(ZeigerSpeed.transform.rotation,Quaternion.Euler(0,0,DrehungSpeed),Time.deltaTime*1.5);
ZeigerRPM.transform.rotation = Quaternion.Lerp(ZeigerRPM.transform.rotation,Quaternion.Euler(0,0,DrehungRpm),Time.deltaTime);
//ZeigerHitze.transform.rotation = Quaternion.Lerp(ZeigerHitze.transform.rotation,Quaternion.Euler(0,0,DrehungHitze),Time.deltaTime); //No algorithm yet
* DisplaySpeed.text = DigitalSpeed.ToString(“000 km/h”);*
* DisplayRPM.text = DigitalRPM.ToString(“0000 RPM”);*

}

It looks like you have absolutely no idea what you are doing here.

  • Source.text.Length returns the character count of your whole csv file. Splitting the file into single lines have to be done once and not for each character and not each Update
  • I guess your coroutine should replay the saved values at a certain speed.
  • The Update of your Dashboard should be done in Update.

To bring this to an end

var Source : TextAsset;
var ZeigerSpeed : GameObject;
var ZeigerRPM   : GameObject;
var ZeigerHitze : GameObject;
var DisplaySpeed : TextMesh;

var DrehungSpeed = 0.0;
var DrehungRpm = 0.0;
var DrehungHitze = 0.0;

var DrehungSpeed_alt = 0.0;
var DrehungRpm_alt = 0.0;
var DrehungHitze_alt = 0.0;

function Dashboard()
{
    var lines = Source.text.Split("

“[0]);
for(var i = 4; i < lines.Length; i++)
{
DrehungSpeed_alt = DrehungSpeed;
DrehungRpm_alt = DrehungRpm;
DrehungHitze_alt = DrehungHitze;
var values = lines*.Split(”;"[0]);*
DrehungSpeed = int.Parse(values[4]);
DrehungRpm = int.Parse(values[8]);
//DrehungHitze = int.Parse(values[XXXX]);
DrehungSpeed = Mathf.Clamp(DrehungSpeed,0.0,300.0);
yield WaitForSeconds(1.5);
}
}

function Start()
*{ *

  • Dashboard();*
    *} *

function Update()
{
ZeigerSpeed.transform.rotation = Quaternion.Lerp(ZeigerSpeed.transform.rotation,Quaternion.Euler(0,0,DrehungSpeed/300.0 * 180.0),Time.deltaTime);
DisplaySpeed.text = DrehungSpeed.ToString(“000”);
ZeigerRPM.transform.rotation = Quaternion.Lerp(ZeigerRPM.transform.rotation,Quaternion.Euler(0,0,DrehungRpm),Time.deltaTime);
ZeigerHitze.transform.rotation = Quaternion.Lerp(ZeigerHitze.transform.rotation,Quaternion.Euler(0,0,DrehungHitze),Time.deltaTime);
}
I’m not sure if you need the old values but this works for me. I’ve created a small csv file with speed values between 0 - 300 and they map exactly to 0° - 180°
edit
if you want a numeric display as well you should store the actual speed value and not the angle for the gauge. The calculation Speed->Angle can be done in update. I’ve updated the code. To display it as text you can use a GUIText component
second edit
Well, if you want the numeric display to be in 3D space you should use a [3DText][1] (aka [TextMesh component][2]). I updated my script to display the speed in a TextMesh. You just need to add a 3DText-gameobject to your scene and dragdrop it onto the DisplaySpeed variable;
[1]: http://unity3d.com/support/documentation/Components/class-TextMesh.html
[2]: http://unity3d.com/support/documentation/ScriptReference/TextMesh.html

Firstly you call your script at the wrong place. Remove yield WaitForSeconds(0.5); from the end, use Dashboard() inside Update(). Assuming your speed calculations are correct I would change this line

ZeigerSpeed.transform.Rotate(0,0,DrehungSpeed);
ZeigerRPM.transform.Rotate(0,0,DrehungRpm);

to use

ZeigerSpeed.transform.rotation.eulerAngles.z = DrehungSpeed;
ZeigerRPM.transform.rotation.eulerAngles.z = DrehungRpm;

Finally assuming your speed and rpm won’t be a good value for rotations, use this formula:

rotation.eulerAngles.z = currentSpeed/topSpeed * maxAngleOfDashboard

This way rotation of needle will be 0 at 0 speed and maxAngleOfDashboard at top speed.