- Home /
is there any possible to use two transform.rotate function for same gameobject??
hai guys.....am trying to move a vehicle based on velocity in the terrain which includes ups and down....am using transform.rotate function in 2 different areas for different purpose.....one is
float turn=input.getAxix("Horizontal")*300*time.deltatime;
curDirection=(curDirection+turn)%360;
transform.rotation(0,curDirection,0);
its for vehicle orientation adjustment when car is in ups and down.....another one is for vehicle movement i,e left and right ...that code is
if(input.getGetkey(keycode.leftArrow))
transform.rotate(vector3.up*time.deltaTime*-rotationSpeed);
if(input.getGetkey(keycode.rightArrow))
transform.rotate(vector3.up*time.deltaTime*rotationSpeed);
when am try to move a car in left side it doesnt take my currnt if condition i,e when am pressing left arrow that line doesnt executed....what can i do..is there any possible solution to use 2 differnt rotation function for same car object without affection each other......thanks in advance....please ignore cases.....
We can't do much without seeing all the code, there's no trade secrets co$$anonymous$$g here for help LOL.
Reason i'm saying that is I see a variable called rotationSpeed, but I don't see anything about it anywhere, so we may not be seeing the important part of the code you are showing us.... We can't dissect pieces of the code, we need it all, and if that's all of it, then you have a lot of work to do lol.
You could try vector3.left and vector3.right for your vectors not sure if that will help, but that's all i can really offer right now, I'm sorry.
But if you can do what I asked if the Vectors don't work, maybe I can help more.
hai N1warhead.....this is my full code of my project....
// this class is to check the car (vehicle) orientation that is when car is going towards the ups and downs this class is used to adjust the position of the car
public class vehicleOrientation
{
public Transform target;
vector3 curNormal=vector3.up;
vector3 upAngle=vector3.up;
float curDir=0f;
void start(){}
void fixedupdate()
{
Raycasthit hit;
//get the axis from the ground for adust the car rotation
float turn=Input.GetAxis("horizontal")*300*time.deltaTime;
curDir=(curDir+turn)%360;
characterController controller=GetComponent<characterController>();
//check whether the car is in ups na it is used to adjust the position
if(pyhsics.raycast(transfom.localposition,-vector3.down,out hit))
{
float distanceToGround=hit.distance;
vector3 pos=transform.GetChild(0).position;
pos.y=pos.y+distanceToGround;
transform.getchild(0).position=pos;
//this part is used to adjust the rotation angle of the car
curNormal=vector3.lerp(upAngle,hit.Normal,10*time.deltatime);
quaterinion grdnTilt=quaterinion.FromToRotation(vector3.up,upangle);
transform.rotation=(grndTilt*quaternion.Eular(0,curDir,0));
target.Translate(0,transform.Getchild(0).position.y,0);
}
// its for whenever car moving downwards to adjust the angle
else if(physics.Raycast(transform.localposition,-curNormal,out hit))
{
curNormal=vector3.lerp(upAngle,hit.Normal,10*time.deltatime);
quaterinion grdnTilt=quaterinion.FromToRotation(vector3.up,upangle);
transform.rotation=(grndTilt*quaternion.Eular(0,curDir,0));
}
//check always the is in ground
if(!controller.isGrounded)
{
vector3 pos=transform.GetChild(0).position;
pos.y=0;
transform.GetChid(0).position=pos;
}
}
it is working properly but now i want to move the car based on the velocity... if am trying to rotate the car using left and right arrows it doesnt working....
my car moving script is //where rotation speed is 300
if(input.getGetkey(keycode.leftArrow))
transform.rotate(vector3.up*time.deltaTime*-rotationSpeed);
if(input.getGetkey(keycode.rightArrow))
transform.rotate(vector3.up*time.deltaTime*rotationSpeed);
now co$$anonymous$$g to my problem.....whenever am trying to move the car in left or right side it doesnt works because the transorm.rotation used two times....is there any possible way to rotate the car without affecting the transform.rotation function each other...or else give some simple coding to adjust the cars position in ups and downs of the terrain...by coding only am expecting...pls dont say use boxcollider...or gravity method...Thanks...am waiting.....
Answer by sevensixtytwo · Sep 23, 2014 at 05:10 PM
I don't really know what you're trying to do with the first part of the code you posted, but as for the second part... it's much easier if you don't repeat code too much. You can use an axis variable for better control over the transform functions.
public var axis : int;
then you put the Rotate line in Update:
//Note how we are multiplying it to the "axis" variable
transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime * axis);
next comes the actual input:
if (Input.GetKey(KeyCode.LeftArrow)) {
axis = -1;
}
else if (Input.GetKey(KeyCode.RightArrow)) {
axis = 1;
}
else {
axis = 0;
}
Basically, your object will begin rotating according to the "axis" variable. If you press Right Arrow, the axis will be 1 and the object will rotate towards the right. If you press Left Arrow, the axis will be -1 and the object will rotate towards the left. If you are not pressing any button, the axis will be 0 and the object will not rotate.
hai N1warhead.....this is my full code of my project....
// this class is to check the car (vehicle) orientation that is when car is going towards the ups and downs this class is used to adjust the position of the car
public class vehicleOrientation
{
public Transform target;
vector3 curNormal=vector3.up;
vector3 upAngle=vector3.up;
float curDir=0f;
void start(){}
void fixedupdate()
{
Raycasthit hit;
//get the axis from the ground for adust the car rotation
float turn=Input.GetAxis("horizontal")*300*time.deltaTime;
curDir=(curDir+turn)%360;
characterController controller=GetComponent<characterController>();
//check whether the car is in ups na it is used to adjust the position
if(pyhsics.raycast(transfom.localposition,-vector3.down,out hit))
{
float distanceToGround=hit.distance;
vector3 pos=transform.GetChild(0).position;
pos.y=pos.y+distanceToGround;
transform.getchild(0).position=pos;
//this part is used to adjust the rotation angle of the car
curNormal=vector3.lerp(upAngle,hit.Normal,10*time.deltatime);
quaterinion grdnTilt=quaterinion.FromToRotation(vector3.up,upangle);
transform.rotation=(grndTilt*quaternion.Eular(0,curDir,0));
target.Translate(0,transform.Getchild(0).position.y,0);
}
// its for whenever car moving downwards to adjust the angle
else if(physics.Raycast(transform.localposition,-curNormal,out hit))
{
curNormal=vector3.lerp(upAngle,hit.Normal,10*time.deltatime);
quaterinion grdnTilt=quaterinion.FromToRotation(vector3.up,upangle);
transform.rotation=(grndTilt*quaternion.Eular(0,curDir,0));
}
//check always the is in ground
if(!controller.isGrounded)
{
vector3 pos=transform.GetChild(0).position;
pos.y=0;
transform.GetChid(0).position=pos;
}
}
it is working properly but now i want to move the car based on the velocity... if am trying to rotate the car using left and right arrows it doesnt working....
my car moving script is //where rotation speed is 300
if(input.getGetkey(keycode.leftArrow))
transform.rotate(vector3.up*time.deltaTime*-rotationSpeed);
if(input.getGetkey(keycode.rightArrow))
transform.rotate(vector3.up*time.deltaTime*rotationSpeed);
now co$$anonymous$$g to my problem.....whenever am trying to move the car in left or right side it doesnt works because the transorm.rotation used two times....is there any possible way to rotate the car without affecting the transform.rotation function each other...or else give some simple coding to adjust the cars position in ups and downs of the terrain...by coding only am expecting...pls dont say use boxcollider...or gravity method...Thanks...am waiting.....
Answer by smoggach · Sep 23, 2014 at 05:47 PM
sevensixtytwo is correct. In these situations it's best to perform your function call only once, only if it has to, and with a value depending on one or more keypresses.
I would do something more like this:
Vector3 rotation;
bool rotating = false;
if(input.getGetkey(keycode.leftArrow))
{
rotation = vector3.up*time.deltaTime*-rotationSpeed;
rotating = true;
}
if(input.getGetkey(keycode.rightArrow))
{
rotation = vector3.up*time.deltaTime*rotationSpeed;
rotating = true;
}
if (rotating)
transform.rotate(rotation);
hai smoggach.....this is my full code of my project....
// this class is to check the car (vehicle) orientation that is when car is going towards the ups and downs this class is used to adjust the position of the car
public class vehicleOrientation
{
public Transform target;
vector3 curNormal=vector3.up;
vector3 upAngle=vector3.up;
float curDir=0f;
void start(){}
void fixedupdate()
{
Raycasthit hit;
//get the axis from the ground for adust the car rotation
float turn=Input.GetAxis("horizontal")*300*time.deltaTime;
curDir=(curDir+turn)%360;
characterController controller=GetComponent<characterController>();
//check whether the car is in ups na it is used to adjust the position
if(pyhsics.raycast(transfom.localposition,-vector3.down,out hit))
{
float distanceToGround=hit.distance;
vector3 pos=transform.GetChild(0).position;
pos.y=pos.y+distanceToGround;
transform.getchild(0).position=pos;
//this part is used to adjust the rotation angle of the car
curNormal=vector3.lerp(upAngle,hit.Normal,10*time.deltatime);
quaterinion grdnTilt=quaterinion.FromToRotation(vector3.up,upangle);
transform.rotation=(grndTilt*quaternion.Eular(0,curDir,0));
target.Translate(0,transform.Getchild(0).position.y,0);
}
// its for whenever car moving downwards to adjust the angle
else if(physics.Raycast(transform.localposition,-curNormal,out hit))
{
curNormal=vector3.lerp(upAngle,hit.Normal,10*time.deltatime);
quaterinion grdnTilt=quaterinion.FromToRotation(vector3.up,upangle);
transform.rotation=(grndTilt*quaternion.Eular(0,curDir,0));
}
//check always the is in ground
if(!controller.isGrounded)
{
vector3 pos=transform.GetChild(0).position;
pos.y=0;
transform.GetChid(0).position=pos;
}
}
it is working properly but now i want to move the car based on the velocity... if am trying to rotate the car using left and right arrows it doesnt working....
my car moving script is //where rotation speed is 300
if(input.getGetkey(keycode.leftArrow))
transform.rotate(vector3.up*time.deltaTime*-rotationSpeed);
if(input.getGetkey(keycode.rightArrow))
transform.rotate(vector3.up*time.deltaTime*rotationSpeed);
now co$$anonymous$$g to my problem.....whenever am trying to move the car in left or right side it doesnt works because the transorm.rotation used two times....is there any possible way to rotate the car without affecting the transform.rotation function each other...or else give some simple coding to adjust the cars position in ups and downs of the terrain...by coding only am expecting...pls dont say use boxcollider...or gravity method...Thanks...am waiting.....