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 /
avatar image
0
Question by RhinoPak · Feb 27, 2020 at 08:43 AM · rotationrigidbodytransformquaternion

Problem with rigidbodies and rotation with quaternion

A weird thing is happening in my game i can't explain why. first let me put up the code so people can better understand

 public class Player : MonoBehaviour
 {
 
     float moveSpeed = 25.0f;
     float turnSpeed = 180.0f;
     Rigidbody body;
     GameObject head;
     Vector3 movement;
     Vector3 rotation;
     Vector3 headPitch;
 
 
     void Awake()
     {
         //headTarget = GameObject.Find("HeadTarget");
         head = GameObject.Find("HeadController");
         body = GetComponent<Rigidbody>();
     }
 
     void GetInput()
     {
         movement = new Vector3(Input.GetAxis("LeftJoyHori"), 0, Input.GetAxis("LeftJoyVert"));
         rotation = new Vector3(0, Input.GetAxis("RightJoyHori"), 0);
         headPitch = new Vector3(Input.GetAxis("RightJoyVert"), 0, 0);
     }
     void moveCharacter(Vector3 movement)
     {
         movement = transform.TransformDirection(movement);
         body.MovePosition(transform.localPosition + movement * moveSpeed * Time.deltaTime);
     }
     void rotateCharacter(Vector3 rotation)
     {
         float newYaw = rotation.y * turnSpeed * Time.deltaTime;
         Quaternion deltaRotation = Quaternion.AngleAxis(newYaw, Vector3.up);
         body.MoveRotation(transform.localRotation * deltaRotation);
     }
     
     void headRotate(Vector3 pitch)
     {
         float newPitch = pitch.x * turnSpeed * Time.deltaTime;
         Quaternion deltaRotation = Quaternion.AngleAxis(newPitch, Vector3.right);
         head.GetComponent<Rigidbody>().MoveRotation(head.transform.localRotation * deltaRotation);
     }
     void Update()
     {
         GetInput();
     }
     void FixedUpdate()
     {
         moveCharacter(movement);
         rotateCharacter(rotation);
         headRotate(headPitch);
         //headFollow(movement);
         //headReturn();
     }


The problem I am having is with the headRotate() function, which is supposed to only modify the pitch of the HeadController. (here is a screenshot of the hierarchy, I'm using a rigidbody for both the player and the HeadController)

alt text

when i turn up and down with my right thumbstick the HeadControllers rigidbody is supposed to turn on the x axis so it would look up and down, but for some reason when i turn the ENTIRE rigidbody starts going nuts. its SUPPOSED to turn around the y axis by turning left and right, and i don't know what i have done wrong. here is whats currently happening running the code above The problem

can someone please help me fix my code and tell me what i was doing wrong with my rotation. thank you.

higherarcy.png (10.6 kB)
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Magso · Feb 27, 2020 at 09:27 AM

Firstly is the head's collider inside the body's collider? As the rigidbodies call WakeUp() it will cause them to behave erotically. Secondly in your code you're not clamping the head movement in any way. Typically looking around is done using localEulerAngles or localRotation without a rigidbody and the values are clamped Mathf.Clamp. This will be causing the head to spin exponentially faster.

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

206 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

Related Questions

Object slope rotation issue 0 Answers

Player character X rotation going haywire on game start 1 Answer

How do i rotate an object around an arbitrary axis in 3D? 0 Answers

Limit Rotation of Rigidbody to 45 Degrees (Handlebars on a Bicycle) 1 Answer

Get slerp to work just as LookAt(,Vector3.right) does 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