예제 #1
0
 // 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>();
 }
예제 #2
0
    // 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;
            }
        }
    }