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
0
Question by Basmati · Oct 14, 2012 at 10:24 PM · rotatecar

Scripting control of rotation on collision exit of terrain

I'm making a stunt car game and I want to be able to control the rotation of the vehicle when it's in the air but I've got a problem.

I pieced together this script

 var rotatespeed : float = 5.0;
 
 function OnCollisionExit(collisionInfo : Collision) {}
 (
 transform.Rotate(Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0) * Time.deltaTime * rotatespeed));


It doesn't give me any errors in unity but it also doesn't do anything...

Sure the code is laughable but I would be happy to hear any input.

Comment
Add comment
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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by DanielSig · Nov 19, 2012 at 09:50 PM

Do you want the player to be able to rotate the car while being airborne?

If so, you should know that OnCollisionExit doesn't mean the rigidbody is airborne. It simply means that it stopped touching something it had previously been touching.

I recommend doing it like this:

 var rotatespeed : float = 5.0;
 var isAirBorne: bool = true;
 
 function OnCollisionStay() : void
 {
     isAirBorne = false;
 }
 
 function Update() : void
 {
     if(isAirBorne)
     {
         rigidbody.AddRelativeTorque
         (
             new Vector3
             (
                 Input.GetAxis("Vertical"),
                 Input.GetAxis("Horizontal"),
                 0
             ) * rotatespeed,
             ForceMode.Acceleration
         );
     }
     isAirBorne = true;
 }
Comment
Add comment · 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
0

Answer by DanielSig · Nov 19, 2012 at 09:54 PM

Two other things you should have in mind:

  1. You had swapped the X and Y rotations in your Euler angles

  2. You were going to rotate the car around the global X-axis, which is weird unless your car can't turn or if you're moving the environment around the car instead of the car around the environment.

1)

  • When you rotate an object around the X axis, it tilts forwards/backwards.

  • When you rotate an object around the Y axis, it turns left/right.

This is because you're rotating around the axis, e.g. lets say that north is up, then the earth would be rotating around it's Y-axis.

2)

Rotating the car around the global X-axis will tilt it back and forth while your car is heading exactly e.g. north. But when it turns west, rotating the car around the global X-axis means that you will start rolling the car sideways.

The best solution to this would be to rotate the car in the camera local space, e.g. something like this:

 var cam : Transform = Camera.main.transform;
 rigidbody.AddTorque
 (
     rotatespeed *
     (
         cam.up * Input.GetAxis("Horizontal")
         + cam.right * Input.GetAxis("Vertical")
     ),
     ForceMode.Acceleration
 );
Comment
Add comment · 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

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

10 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Problem turning empty object containing multiple objects 2 Answers

Car goes a bit left when moving 1 Answer

Car Selection... 1 Answer

Car steering 1 Answer

if occurs for continuesly for 3 seconds 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