public static float G = (float)6.67; //6.67e-11; //you may add your own rules instead of "Universal Gravitation" public Vector3 CalculateForce(VelocityVerletObject obj) { Vector3 f = Vector3.zero; foreach (VelocityVerletObject item in objects) { if (item != obj) { Vector3 dir = item.transform.position - obj.transform.position; float r2 = Mathf.Max(0.1f, Vector3.SqrMagnitude(dir)); //ensure ug will not inf if (r2 > 1) { float ug = (float)(G * item.mass * obj.mass / r2); //force dir: obj->item f += dir.normalized * ug; } } } return(f); }
public void RemoveObject(VelocityVerletObject obj) { objects.Remove(obj); }
public void AddObject(VelocityVerletObject obj) { objects.Add(obj); }