using UnityEngine; using System.Collections; using System.Collections.Generic; public class gravityWell : MonoBehaviour { public float wellMass; public int gravConstPow; public GameObject[] targets; //public float minDistance; //public float bufferZone; //public float bufferDampner; public float clampVelo; public float maxVelo; public float moveSpeed; // Use this for initialization void Start () { } // Update is called once per frame void FixedUpdate () { foreach (GameObject target in targets) { /*target.rigidbody.AddForce( calcGrav (target)); target.rigidbody.velocity = Vector3.ClampMagnitude(target.rigidbody.velocity, clampVelo); Debug.Log(target.rigidbody.velocity.magnitude);*/ float step = moveSpeed * Time.deltaTime; target.transform.position = Vector3.MoveTowards(target.transform.position,transform.position, step); } } private Vector3 calcGrav(GameObject target){ double GRAVCONSTANT = 6.673f * Mathf.Pow (10, gravConstPow); Vector3 distance = this.transform.position - target.transform.position; float mag = distance.magnitude; distance /= mag; float gravityForce = (target.GetComponent().mass * wellMass * (float)GRAVCONSTANT) / (mag * mag); //if (minDistance > mag) // return (Vector3.zero); //else if (bufferZone > mag) // return (-(distance * gravityForce)/bufferDampner); //else Debug.Log ((distance * gravityForce).magnitude); if ((distance * gravityForce).magnitude > maxVelo) return (Vector3.zero); else return (distance * gravityForce); } }