如何强迫翻译经历一个确切点?

我有一个脚本的相机对象,无论是用设定的速度翻译它,还是停止它。 我还有7个“检查站”,有7个不同的四边形,每当摄像机到达他们时,都会停下来。

这里的问题是在我的代码中:

void Update() { if (scoreholder.CheckScore()<scoretimer) { //if the current score is less than set X score if (killcam.transform.position.y == quadholder.y) { //and if the camera's position equals the position of the generic quad *PROBLEM HERE* killcam.GetComponent<cameraUp> ().SetCam (true); //stop the cam while (scoreholder.CheckScore () < scoretimer) { // do stuff offset = mr.material.mainTextureOffset; offset.y += offsetSpeed * 0.1f; mr.material.mainTextureOffset = offset; break; } } } else { //once the score is not less than the desired X score, move the cam killcam.GetComponent<cameraUp> ().SetCam (false); } } 

所以我的问题是,这行代码if (killcam.transform.position.y == quadholder.y)永远不会发生,翻译跳过一些值,并且相机没有命中确切的四点。 我尝试使用>而不是== ,但是我遇到了另外一个问题,就是在第三个四核之后,由于我的相机速度随着时间的增加,代码显然没有得到足够快的处理,而且我的相机超出了第四个,五,六,七号四方不停。

我已经尝试了Vector3.Lerp ,它给了我几乎相同的结果,如果我在轨道的开始和结束之间lerp,我必须做一个非常小的一小部分,我不能让我的相机移动在那个速度。 非常感谢任何人的帮助。

Vector3.MoveTowards()将完美地适合您的用例。

以下是文档中的示例:

 using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Transform target; public float speed; void Update() { float step = speed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, target.position, step); } }