- Home /
Script Problem
I made an updated version of the script that was on my old post. Now all it makes the flashlight do is rotate in a circle around the x axis. the flashlight is supposed to go from (0, 0, 0) to (31, 0, 0) when sprinting, and back to (0, 0, 0) when not sprinting. Please tell me what i did wrong... again...
var rotationX = 0.0;
var sprintActive : boolean = false;
var breathingObj : GameObject;
var lightObject : Light;
var stopMovement : boolean = false;
function Update () {
rotationX = lightObject.transform.rotation.x;
if(sprintActive == true && stopMovement == false){
lightObject.transform.Rotate(Time.deltaTime * 120, 0, 0);
}
else if(sprintActive == false && stopMovement == false){
lightObject.transform.Rotate(Time.deltaTime * -120, 0, 0);
}
if(rotationX > 31 && sprintActive == true){
stopMovement = true;
}
if(rotationX < 0 && sprintActive == false){
stopMovement = true;
}
}
function Start(){
stopMovement = true;
while(true){
yield WaitForSeconds(0.1);
if(breathingObj.GetComponent(SprintScript).isSprinting == true){
sprintActive = true;
stopMovement = false;
}
else if(breathingObj.GetComponent(SprintScript).isSprinting == false){
sprintActive = false;
stopMovement = false;
}
}
}
Answer by ScroodgeM · Aug 05, 2012 at 11:11 AM
rotationX = lightObject.transform.rotation.x;
this line is totally incorrect if you don't understand Quaternion's internal mechanism.
instead of all these check you can do simple thing (handwrited C#-like code)
Quaternion targetRotation = Quaternion.Euler(sprintActive ? 31f : 0f, 0f, 0f);
this will make a rotation that your object should rotate to, rotation is already based on sprintActive value.
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, 10f * Time.deltaTime)
and this will rotate your object to target rotation at maximum speed 10 deg/sec.
so, finally your Update() method will looks like:
void Update() { Quaternion targetRotation = Quaternion.Euler(sprintActive ? 31f : 0f, 0f, 0f); lightObject.transform.rotation = Quaternion.RotateTowards(lightObject.transform.rotation, targetRotation, 10f * Time.deltaTime) }
and 'stopMovement' is no need actually now cause object will not rotate more then needed. unless you want to stop rotating immediately before gaining target rotation...
Also, What would the javascript version of:
void Update() { Quaternion targetRotation = Quaternion.Euler(sprintActive ? 31f : 0f, 0f, 0f); lightObject.transform.rotation = Quaternion.RotateTowards(lightObject.transform.rotation, targetRotation, 10f * Time.deltaTime) }
be?
Im really confused about this please explain a bit about how this works if you wouldnt $$anonymous$$d
'?' is a condition symbol.
if (a > 0) { b = 1; } else { b = 0; }
can be writed as
b = a > 0 ? 1 : 0;
about JS: i don't write in JS. it's not a lot difference between C# and JS in unity.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Wheel Collider Rotation Problem 0 Answers
Player Controller Rotation Script Help 2 Answers