Simular Gravedad Unity



Bienvenid@ lector/a, en esta nueva entrada veremos un script para simular gravedad entre dos cuerpos en Unity.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Attractor : MonoBehaviour
{
public Rigidbody2D Rb;
 private void FixedUpdate()
{
Attractor[] attractors = FindObjectsOfType();
foreach (Attractor attractor in attractors)
{
if (attractor != this)
Attract(attractor);
}
}

private void Attract(Attractor objATiAttract)
{
Rigidbody2D rbToAttract = objATiAttract.Rb;
Vector2 direction = Rb.position - rbToAttract.position;
float distance = direction.magnitude;
 float forceMagnitude = (Rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
Vector2 force = direction.normalized * forceMagnitude;
rbToAttract.AddForce(force);
 }
}
Antes de todo este script funciona con elementos 2D, si se quiere ocupar con elementos 3D se debe hacen algunos cambios.

Para que este script funcione correctamente ambos cuerpo (GameObject) deben tener un RigiBody cada uno, la propiedad de gravedad debe estar activado (Dynamic) ademas se debe cambiar el valor de la masa (Mass) a 100 o 1000 para probar, debe ir ajustando a las necesidades.


MODIFICACIÓN PARA USARLO CON ELEMENTOS 3D

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Attractor : MonoBehaviour
{
     public Rigidbody Rb;
    private void FixedUpdate()
   {
        Attractor[] attractors = FindObjectsOfType();
       foreach (Attractor attractor in attractors)
      {
          if (attractor != this)
             Attract(attractor);
      }
   }

   private void Attract(Attractor objATiAttract)
   {
         Rigidbody rbToAttract = objATiAttract.Rb;
        Vector3 direction = Rb.position - rbToAttract.position;
        float distance = direction.magnitude;
       float forceMagnitude = (Rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
       Vector3 force = direction.normalized * forceMagnitude;
      rbToAttract.AddForce(force);
  }
}



Este sitio fue creado en primera instancia como un lugar donde ir acumulando información y/o apuntes que considere de utilidad para un futuro cercano, pero a medida que ha avanzado el tiempo este lugar se a vuelto un punto de encuentro para muchas personas que se están iniciando en el mundo de la programación, es por eso que si estás leyendo esto estas invitado a participar en de esta comunidad que día a día va creciendo. Si estás dispuesto a cooperar te sugiero que dejes tus inquietudes, dudas o aportes en la caja de comentario de cualquiera de las entradas del blog o haciendo directamente desde el formulario de contacto que puede encontrar en la página de inicio y responderé a la brevedad.

Entradas más populares de este blog

Convertir decimal a binario, octal y hexadecima

Crear servicio web en Visual C# (WebService)