我创建了一个协同线来处理我的相机的移动和方向来查看,在这个协同线中,我有:
public IEnumerator MoveCameraLookAtObject(Transform _cameraTransform, Vector3 startPos, Vector3 endPos, Vector3 lookAt, float time)
{
// Loop through a timed based situation.
for (float i = 0f; i <= 1.0f; i += Time.deltaTime / time)
{
// Lerp the Movement.
_cameraTransform.position = Vector3.Lerp(startPos, endPos, i);
// Slerp the rotation.
Vector3 relativePos = lookAt - _cameraTransform.position;
Quaternion rotation = Quaternion.LookRotation(relativePos);
_cameraTransform.rotation = Quaternion.Slerp(_cameraTransform.rotation, rotation, i);
}
yield return null;
}
}问题是,当我真正的学习和细腻,它看起来可怕和不顺利,无论怎样。我对自己做错了什么感到困惑,因为我花了好几天的时间来解决这个问题。我看了一下Lerp and Slerp Question,发现这和我的问题差不多一样,但我已经找到了那个人需要的答案。
发布于 2016-03-07 13:57:45
会更像这样
public IEnumerator MoveCameraLookAtObject(
Transform _cameraTransform,
Vector3 startPos, Vector3 endPos, Vector3 lookAt, float time)
{
float totalTime = 1.25f; // or whatever
float startTime = Time.time;
float endTime = startTime + totalTime;
startPos = etc etc
endPos = etc etc
startROTATION = ...
endROTATION = ...
// calculate those ONLY OUT HERE!!! not in the loop
while (Time.time < endTime)
{
float timeSoFar = Time.time - startTime;
float fractionTime = timeSoFar/totalTime;
//do NOT USE underscores in variable names
cameraTransform.position =
Vector3.Lerp(startPos, endPos, fractionTime);
cameraTransform.rotation =
Quaternion.Slerp(startROTATION, endROTATION, fractionTime);
yield return null; // this goes IN HERE
}
}刚开始测试它的位置,然后尝试扭转!干杯
https://stackoverflow.com/questions/35845187
复制相似问题