- Home /
 
 
               Question by 
               Ochreous · Oct 31, 2014 at 06:31 AM · 
                c#rigidbodyrotatearound  
              
 
              C# RotateAround for 2DRigidBodies
I have a script that makes gameobjects move towards and rotate around another scripted gameobject. I would like to be able to use the gameobject's 2Drigidbody for rotating. Is there a RotateAround function for 2DRigidbodies? I was also noticing that while using RotateAround the gameobjects wouldn't move towards the scripted gameobject. How do I get the gameobjects to rotate around and move towards the scripted gameobject?
 using UnityEngine;
 using System.Collections;
 
 public class MoveTowardsAndRotate: MonoBehaviour {
 public float fDistance = 1;
 public float fSpeed = 2;
 public float sensitivity = 3F;
 public GameObject gameObjectToMove;
 public Collider2D[] cols;
      
     void LateUpdate () {
             cols = Physics2D.OverlapCircleAll(transform.position, 5f);
      
         for(int i = 0; i < cols.Length; i++){
         cols[i].gameObject.rigidbody2D.MovePosition(Vector3.Lerp(cols[i].gameObject.transform.position, transform.position, Time.smoothDeltaTime/sensitivity));
         cols[i].transform.RotateAround(transform.position, Vector3.forward, - fSpeed / fDistance);
         }
     }
 }
 
              
               Comment
              
 
               
              Answer by robertbu · Nov 01, 2014 at 03:56 AM
A RotateAround() will cause a change in position as well as a change in direction. So here is a literal translation of what you are asking for (untested):
     for(int i = 0; i < cols.Length; i++){
         Vector3 pos = Vector3.Lerp(cols[i].gameObject.transform.position, transform.position, Time.smoothDeltaTime/sensitivity);
         Vector3 v = pos - transform.position;
         float angle = -fSpeed / fDistance;
         v = Quaternion.AngleAxis (angle, Vector3.forward) * v;
         pos = transform.position + v;
         Rigidbody2D r = cols[i].gameObject.rigidbody2D;
         r.MovePosition(pos);
         r.MoveRotation(r.rotation + angle);
     }
 
               It can be written in a more compact (and less readable) form, but I left all the steps in.
Your answer