// Use this for initialization void Start() { UiManager = FindObjectOfType <UIManager>(); dist = 20f; dir = Vector3.up; target = GameObject.FindGameObjectWithTag("host").GetComponent <PhysicsObject>(); targetRad = target.transform.localScale.x; SetCamTarget(target); objectCamCtrlr = FindObjectOfType <ObjectCamCtrlr>(); }
// Use this for initialization void Start() { //Aquire references UiManager = FindObjectOfType <UIManager>(); if (UiManager == null) { Debug.Log("UiManager not found!"); } mainCamController = Camera.main.GetComponent <CamController>(); if (mainCamController == null) { Debug.Log("Main Cam Controller fot Found."); } previewCamCtrlr = FindObjectOfType <ObjectCamCtrlr>(); if (previewCamCtrlr == null) { Debug.Log("Preview Cam Controller not found!"); } //Apply Random Spin around local Y axis Vector3 spinVector = transform.up * Random.Range(0.1f, 2.0f); rb.angularVelocity = spinVector; trailRenderer = GetComponentInChildren <TrailRenderer>(); if (spawnWithOrbit) { float strongestForce = 0.0f; PhysicsObject strongestObj = null; // Sort PhysicsObjects by Mass physicsObjects.Sort((y, x) => x.rb.mass.CompareTo(y.rb.mass)); //Find Object with highest gravitational influence foreach (PhysicsObject obj in physicsObjects) { //Obtain Direction Vector Vector3 dir = rb.position - obj.rb.position; //Obtain Distance, return if 0 float dist = dir.magnitude; if (dist != 0) { //Calculate Magnitude of force float magnitude = G * (rb.mass * obj.rb.mass) / Mathf.Pow(dist, 2); //Calculate force Vector3 force = dir.normalized * magnitude; if (force.magnitude >= strongestForce) { strongestObj = obj; strongestForce = force.magnitude; } } } //Attempt to achive stable orbit if (strongestObj != null) { //Obtain Oblique vector along y plane Vector3 dir = rb.position - strongestObj.rb.position; float dist = dir.magnitude; Vector3 requiredV = new Vector3(dir.z, dir.y, -dir.x); float vMag = Mathf.Sqrt(G * strongestObj.rb.mass / dist); requiredV = requiredV.normalized * vMag; rb.velocity = requiredV + strongestObj.rb.velocity; } } }