Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
-1
Question by gopics · Sep 23, 2014 at 03:13 PM · rotationtransformtranslationhorizontallocalrotation

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.....

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image N1warhead · Sep 23, 2014 at 04:35 PM 0
Share

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.

avatar image gopics · Sep 24, 2014 at 05:42 AM 0
Share

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.....

2 Replies

· Add your reply
  • Sort: 
avatar image
0

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.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image gopics · Sep 24, 2014 at 05:42 AM 0
Share

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.....

avatar image
0

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);


Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image gopics · Sep 24, 2014 at 05:43 AM 0
Share

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.....

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

transform.localRotation lerp precision 1 Answer

Moving objects together without parenting 5 Answers

Aligning a transform according to two different positions and directions 1 Answer

Why does this script work correctly? 1 Answer

Smooth transform position and rotation 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges