Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by CROnerd64 · Feb 09, 2019 at 05:28 PM · c#controllertutorialwheelcollider

applying visual wheels according to position left/right

I have found tutorial on https://docs.unity3d.com/Manual/WheelColliderTutorial.html very useful, but after applying my own custom meshes, I have noticed that they are all rotated I the same direction (facing right, in my case).

alt text alt text

Is there a way that I can edit the code given on the link in such way that I can rotate the meshes using two boolean variables, left and right, mutually exclusive to each other, to make them face either to the left or right ?

screenshot-2019-02-09-at-181357.png (251.3 kB)
screenshot-2019-02-09-at-181442.png (153.9 kB)
Comment
Add comment · Show 1
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 CROnerd64 · Feb 09, 2019 at 08:29 PM 0
Share

the top picture is showing my vehicle from the from-right side, while the bottom shows it from from-left side. notice the mesh on the wheels.

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by DCordoba · Feb 10, 2019 at 10:59 AM

Since visualWheel is a child of each wheel to have the wheel collider (who really affect the weel behavior) you can change the code visuals whithout affect the physics.

We can do a better performance handling quaternions directly, but since I don't want to mess the code (and my mind) with quaternions, lets use euler (degrees) angles.

According the instructions of the tutorial, the axis of the weels is X axis, and up is Y, we need to rotate Y axis 180 degrees, but, accordingly with the car orientation. To not reinvent the wheel, we will use transform.Rotate

So, lets change first ApplyLocalPositionToVisuals adding a bool, as you desire, to determine if wheel is right or left, and rotate 180° all the left, on your case.

 public void ApplyLocalPositionToVisuals(WheelCollider collider, bool isAtLeft)
 {
     if (collider.transform.childCount == 0) {
         return;
     }
  
     Transform visualWheel = collider.transform.GetChild(0);
  
     Vector3 position;
     Quaternion rotation;
     collider.GetWorldPose(out position, out rotation);
  
     visualWheel.transform.position = position;
     visualWheel.transform.rotation = rotation;
     if(isAtLeft)
     //@CROnerd64 use local forward there, local up didn't seem to work properly
               visualWheel.transform.Rotate(0, 0, 180f, Space.Self);
 }

now you can use it on the FixedUpdate code, just modify the line:

         ApplyLocalPositionToVisuals(axleInfo.leftWheel, true);
         ApplyLocalPositionToVisuals(axleInfo.rightWheel, false);

if found any problem with this code, please comment :)

@CROnerd64 nice mars rover btw

EDIT: @CROnerd64 found two errors in the original answer, modifying it to the final script

Comment
Add comment · Show 9 · 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 CROnerd64 · Feb 10, 2019 at 01:53 PM 1
Share

the visuals are working perfectly, until I start moving around. to be more precise, when I turn vehicle around the axis; all the wheels on the left start going haywire. I would assume its because its trying to rotate it around local axis.

@DCordoba thanks for the rover. if you are interested in the models, I could send you tinkercad link privately.

avatar image CROnerd64 · Feb 10, 2019 at 02:07 PM 1
Share

ok, I think I solved it. the issue was that it was trying to rotate it according to self, which is constantly rotating. So ins$$anonymous$$d of:

 if(isAtLeft)
      //please note that I use local up there, no matter if car isn't up, or if the wheel is tilted
               visualWheel.transform.Rotate (visualWheel.transform.up, 180);
  }

I have put:

 if(isAtLeft)
      //please note that I use local up there, no matter if car isn't up, or if the wheel is tilted
               visualWheel.transform.Rotate (transform.up, 180);
  }

this, if I am understanding correctly, will rotate it by 180 degs according to the wheel object that has wheelcollider attached to it, giving it a consistent pivot to rely upon.

@DCordoba could you please modify your answer to to match what I have written here, so I can accept it?

avatar image CROnerd64 · Feb 19, 2019 at 08:13 PM 1
Share

as it turns out, above code will still fail if the vehicle starts turning around the z axis, that is, if it flips on the side, or climbs up for eg. a rock, it will rotate incorrectly. so after a lot of head banging and crying, I found a solution to that too; ins$$anonymous$$d of:

visualWheel.transform.Rotate (transform.up, 180);

write:

visualWheel.transform.eulerAngles=new Vector3(visualWheel.transform.eulerAngles.x,visualWheel.transform.eulerAngles.y,visualWheel.transform.eulerAngles.z+180);

sure, its a bit longer, and probably inelegant, but it works nonetheless

@DCordoba one last edit pls ?

avatar image DCordoba CROnerd64 · Feb 20, 2019 at 12:50 AM 0
Share

my friend, this is the same to do:

     visualWheel.transform.Rotate(0, 0, 180f, Space.Self);

or

      visualWheel.transform.Rotate (visualWheel.transform.forward, 180);

how is possible to this work one way and not by another...?

I mean transform.up and transform.forward are both orthogonal to the left vector, I choose up because think to this was more readable, sorry

but I still dont understand why dont work...

avatar image CROnerd64 DCordoba · Feb 20, 2019 at 11:49 PM 0
Share

neither do I. I can only present you with my observations on the behaviour or code, and this is what I've got:

the visualWheel.transform.Rotate(0, 0, 180f, Space.Self); and visualWheel.transform.eulerAngles=new Vector3(visualWheel.transform.eulerAngles.x,visualWheel.transform.eulerAngles.y,visualWheel.transform.eulerAngles.z+180);

have proven to work fine for now, but

 visualWheel.transform.Rotate (visualWheel.transform.forward, 180);


does this wonky thing when rotated around Y axis (I have turned off useGravity on rigidBody component of the main player, and used unitys rotation tool to achieve this during runtime, but it can be done without this during playtime to achieve it, this way is just easier for me to snapshot it):

le rover a la mars

awhile the

 visualWheel.transform.Rotate (transform.up, 180);

does this thing when rotated by the Z axis:

le rover a la mars

Im not sure why any of this is happening, and its slowly starting to get on my nerves, but I'm pretty use it has to do with the reference axis we are using, which is why I wrote that long line of code: it takes old variables on X and Y axis and only adds 180 to the Z axis.

Show more comments
avatar image
0

Answer by Schemaposse · Feb 19, 2019 at 06:36 PM

visualWheel.transform.Rotate (Vector3.up, 180);

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 CROnerd64 · Feb 19, 2019 at 08:17 PM 0
Share

@Schemaposse umm, we already have an accepted answer, and that has already proven dysfunctional. please check the comment section of the first answer

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

655 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Hat Trick Game Tutorial: Balls are not Spawning... 1 Answer

Tanks Tutorial: Accessing TankHealth 1 Answer

error cs8025 parsing error? 1 Answer

2D Roguelike tutorial script keeps giving me error CS0120 0 Answers

New to making animator controllers, is there any good tutorials for this? 0 Answers


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