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 JasperDre · Feb 24, 2018 at 07:58 PM · c#2drotationphysicsphysics2d

How to rotate a GameObject with another GameObject while simulating gravity?

The idea is to simulate a 2D space environment where a spaceship (GameObject) gets pulled towards a planet (GameObject) and slowly rotates towards the center of the planet.

My current approach seems to simulate the gravitational pull, but it is very glitchy when it comes to the rotation:

         Rigidbody2D rbToAttract = objToAttract.GetComponent<Rigidbody2D>();
         Vector2 direction = rb.position - rbToAttract.position;
         float distance = direction.magnitude;
 
         // Position
         float forceMagnitude = (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
         Vector2 force = direction.normalized * forceMagnitude;
         rbToAttract.AddForce(force);
 
         // Rotation
         float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
         Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
         // NOTE: one option is to invert the direction and parent the object (far from practical)
         objToAttract.transform.LookAt(-direction);
         // NOTE: another option is to rotate it slowly with the other object
         //objToAttract.transform.rotation = Quaternion.Slerp(objToAttract.transform.rotation,       
         rotation, Time.deltaTime);

Here is an illustration of what I'm trying to achieve: Example image The black arrow resembles the spaceship. The green circle resembles the planet.

Any ideas on a better approach?

planetrotationexample.png (8.5 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

2 Replies

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

Answer by JasperDre · Mar 03, 2018 at 12:23 PM

I eventually fixed it after doing several tests with quaternion and vector functions and mathf from Unity. This is the result where the object gets pulled towards the other object while also rotated towards the center for easy landing. The script could be improved, but I'm working on a prototype (not final): Rigidbody2D rbToAttract = objToAttract.GetComponent();

         Vector2 direction = new Vector2(transform.position.x, transform.position.y) - rbToAttract.position;
         float distance = direction.magnitude;
 
         // Position
         float forceMagnitude = gravitationalPull * (mass * rbToAttract.mass) / Mathf.Pow(distance, 3);
         Vector2 force = direction.normalized * forceMagnitude;
         rbToAttract.AddForce(force);
 
         // Rotation
         float angle = Vector3.Angle(Vector3.up, objToAttract.transform.position - transform.position);
         Debug.Log("angle " + angle);
         float currentAngle = objToAttract.transform.eulerAngles.z;
 
         if (objToAttract.transform.position.x > transform.position.x)
         {
             angle = -angle;
         }
 
         float finalAngle = Mathf.LerpAngle(currentAngle, angle, Time.deltaTime);
 
         objToAttract.transform.eulerAngles = new Vector3(0, 0, finalAngle);
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 Rise2 · Feb 24, 2018 at 08:48 PM

Maybe you can use this:

 public float countdown = 10.0f;
 public float speedZ;

 void Update()
 {

     countdown -= Time.deltaTime;
     if (countdown <= 0.0f)
     {
         transform.Rotate(Vector3.forward * Time.deltaTime * speedZ);
     }

 }

Just an idea, hope it helps.

Comment
Add comment · Show 5 · 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 Rise2 · Feb 24, 2018 at 08:51 PM 0
Share

(for the rotation)

avatar image JasperDre · Feb 25, 2018 at 10:48 AM 0
Share

Hi, Your code is indeed similair to what I'm using to rotate the planet. The current issue is more related to the spaceship. The spaceship does get pulled towards the rotating planet, but it stays on that point and doesn't rotate or move from that position. $$anonymous$$y explantation might be a bit vague, but what I'm trying to achieve is to have the spaceship land on the planet, and make it stick to its relative landing point on the planet as they both should rotate.

avatar image Rise2 JasperDre · Feb 25, 2018 at 04:52 PM 0
Share

Can you attach the spaceship directly to the planet in the hierarchy?

avatar image JasperDre Rise2 · Feb 25, 2018 at 07:25 PM 0
Share

That works when the spaceship doesnt move around, but I would like to rotate it from any close point towards the center.

avatar image Rise2 · Feb 26, 2018 at 09:48 PM 0
Share

I don't know then, but you can try reposting the question and a little bit clearer. Sorry about that

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

517 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

Related Questions

Is there a way to lock velocity? 3 Answers

Rotate a weapon in a circle around player 1 Answer

C# Water Rotation 0 Answers

Flip over an object (smooth transition) 3 Answers

How To Fix My RayCastHit2D in Unity 4.3.4? 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