override public Vector3 moveCamera() { distCovered = (Time.time - startTime) * speed; // creating variables for the current positions and handles Vector3 p0 = wps[wp_id].transform.GetChild(0).position; Vector3 p1 = wps[wp_id + 1].transform.GetChild(0).position; Vector3 h0 = wps[wp_id].transform.GetChild(2).position; Vector3 h1 = wps[wp_id + 1].transform.GetChild(1).position; // Uses the control points to add the curve data Vector3 results = R_Curve.bSpline(p0, h0, h1, p1, distCovered); //Check to see if the section has been done and move on to the next set of waypoints finishedSection(distCovered); return(results); }
override public Vector3 moveCamera() { distCovered = (Time.time - startTime) * speed; // Creating variables for the current set of the waypoints Vector3 p0 = wps[wp_id].transform.GetChild(0).position; Vector3 p1 = wps[wp_id + 1].transform.GetChild(0).position; Vector3 t0 = wps[wp_id].transform.GetChild(0).forward *angular_scalar; Vector3 t1 = -wps[wp_id + 1].transform.GetChild(0).forward *angular_scalar; // Calculating the current position along the curve Vector3 results = R_Curve.hermit(p0, p1, t0, t1, distCovered); //Check to see if the section has been done and move on to the next set of waypoints finishedSection(distCovered); return(results); }
override public Vector3 moveCamera() { distCovered = (Time.time - startTime) * speed; // Extending the way-point position to handle the ends List <Vector3> tpositions = extend_wp(wps); Vector3 p0 = tpositions[wp_id]; Vector3 p1 = tpositions[wp_id + 1]; Vector3 p2 = tpositions[wp_id + 2]; Vector3 p3 = tpositions[wp_id + 3]; // Calculating the position along the curve Vector3 results = R_Curve.catmullRomCurve(p0, p1, p2, p3, distCovered); //Check to see if the section has been done and move on to the next set of waypoints finishedSection(distCovered); return(results); }
// Update is called once per frame void Update() { // Check for camera being close enough to recieve rotation influence from each point of interest float[] weights = new float[pois.Length + 1]; // Extra space for balancing weight weights[weights.Length - 1] = 0; // Default the extra to 0 so it only influences if we need it int weightCount = 0; for (int i = 0; i < weights.Length - 1; i++) { float distanceFromPoI = Vector3.Magnitude(pois[i].transform.position - transform.position); if (distanceFromPoI <= pois[i].AreaOfInterestRadius()) { weightCount++; float weight = distanceFromPoI / pois[i].AreaOfInterestRadius(); // Use Hermet cuve Y value to 'cushion' the approach and exit from PoIs weight = R_Curve.hermit(Vector3.zero, new Vector3(1, 1, 0), new Vector3(3f, 0, 0), new Vector3(-3f, 0, 0), weight).y; weight = 1 - weight; weights[i] = weight; } else { weights[i] = 0; } } // Get the total amount of influence being cast upon the camera float weightTotal = 0; foreach (float weight in weights) { weightTotal += weight; } // if (weightCount == 1) { // if (onlyOnePoI == false) { // onlyOnePoI = true; // imagineryPoI = PoIBlob.transform.position; // } // else { // onlyOnePoI = false; // } // // weights[weights.Length - 1] = weightTotal; // weightTotal += weightTotal; // } // Normalise the weights for (int i = 0; i < weights.Length; i++) { weights[i] = weights[i] / weightTotal; } // Create compound Vector3 to look at Mathd.Vector3 compoundPoI = Mathd.Vector3.zero; for (int i = 0; i < pois.Length; i++) { compoundPoI += new Mathd.Vector3(pois[i].transform.position * weights[i]); } // Look at the compound point PoIBlob.transform.position = compoundPoI.toUnityVec3; LookAt(compoundPoI); }