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 leight0 · May 01, 2016 at 04:38 PM · rotationmovementscripting beginnerconstraints

Why does the FreezeRotation constraint still allow the rotation to be modified?

I have a very basic script attached to a cube in my scene.

 using UnityEngine;
 using System.Collections;
 
 [RequireComponent(typeof(Rigidbody))]
 public class NewBehaviourScript : MonoBehaviour
 {
     Rigidbody rb;
 
     void Awake()
     {
         rb = GetComponent<Rigidbody>();
         rb.useGravity = false;
         rb.constraints = RigidbodyConstraints.FreezeAll;
     }
 
     void FixedUpdate()
     {
         Quaternion deltaRotation = Quaternion.Euler(Vector3.up * 20f * Time.fixedDeltaTime);
         rb.MoveRotation(rb.rotation * deltaRotation);
 
         Vector3 deltaPosition = transform.TransformDirection(Vector3.up * 20f) * Time.fixedDeltaTime;
         rb.MovePosition(rb.position + deltaPosition);
     }
 }

The cube is visibly rotated each time FixedUpdate is called, however it's position is not updated until the constraints are removed.

Why does FreezeRotation allow updates while rotation constraints are enabled, but FreezePosition really does prevent position updates?

I tried with both direct assignment to rotation and position properties, and using MoveRotation and MovePosition methods.

I'm still on day 0 of playing with Unity, so forgive me if there's an obvious explaination. I can't find it!

Comment
Add comment · Show 3
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 Cherno · May 01, 2016 at 07:14 PM 0
Share

I'm pretty sure that the Freeze options only concern "behind the scenes" movement and rotation of the RigidBody object, done by the Physics simulation engine. Directly affecting position and rotation ignores such constraints.

avatar image leight0 Cherno · May 02, 2016 at 08:35 PM 0
Share

@Cherno hence the question, it's inconsistent. After freezing everything, the rotation can be directly manipulated but the movement cannot. I just wondered if there was a specific reason why.

avatar image Raresh leight0 · May 02, 2016 at 08:50 PM 0
Share

$$anonymous$$ight not be 100% correct, but rotations are stored as Quaternions, position is not. $$anonymous$$aybe that could be the reason

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Owen-Reynolds · May 02, 2016 at 09:30 PM

Because the rule is always if you don't want your script to change something, then write your script that way. You never have or need a special command to lock a script variable. It would seem bizarre to programmers if a Unity command ever did that.

In other words, you need a special command to freeze physics-based rotation. But everyone knows you never need a special command to lock transform.rotation. You can just write if(myNoSpinVar==false) // change rotate here. Or write a small rotation class with a lock() function you write yourself.

Another way of thinking of it -- what if you need to freeze physics-based rotation, but want to rotate in code? It's better to have freezing only affect physics-based.

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

How do i use the MathF.Clamp Function correctly? 1 Answer

Record and replay movement 0 Answers

moving an object continuously between waypoints 0 Answers

How to return original rotation of object 0 Answers

How would I add rotation limits to this? 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