相机在更新位置后会不断缓慢晃动

时间:2018-11-28 04:47:14

标签: c# unity3d

请观看video,并告诉我解决方法。谢谢。

当我的相机到达其最终位置时,布尔标志必须变为false。当前,该标志变为true,并且保持为true。我需要找到一种方法,当我的相机移到其第一个目的地时,标志变为假,依此类推。

代码如下:

num_sell

2 个答案:

答案 0 :(得分:1)

  1. 您没有在任何地方将其设置为 false

  2. 您真的不要在Update中执行此操作-您将必须简单地熟悉使用协程

那很容易。

基本形式是

在您的代码中..

StartCoroutine(MoveCamera());

然后

private IEnumerator MoveCamera() {

  while ( not at the new position ) {

    move the object a little
    yield return null;
  }
  set object to final exact position
}

您将在线找到1000个示例!通常,切勿在Unity中使用更新。


在实践中,只需使用Tweeng ...

一旦您对此感到满意。您可以只使用Tweeng。

补间:

https://stackoverflow.com/a/37228628/294884

在您的示例中,您只会说

StartCoroutine( 3f.Tweeng(
     (p)=>transform.position=p,
     fromPosition,
     toPosition) );

那将在3秒内完成(即3f);

享受

答案 1 :(得分:0)

基本上,我同意Fattie的上述回答。 您可以只使用如下所示的协程

IEnumerator PerformCameraMovement(Transform transformToMove,Vector3 fromPos,Vector3 toPos,float time)
    {
        float i = 0;
        float rate = 1 / time;
        while (i<1)
        {
            i += Time.deltaTime * rate;
            transformToMove.position = Vector3.Lerp(fromPos,toPos,i);
            yield return 0;
        }
    }

在这种情况下,transformToMove是摄像机的变换,fromPos是摄像机应开始转换的位置,toPos是摄像机应到达的位置最后time是将相机fromPos转换为toPos

所需的时间

协程就像线程一样工作。

只需使用StartCoroutine(PerformCameraMovement(cameraTransform,cameraTransform.position,Vector3.zero,2.0f));来将此协程称为

并将其放置在需要的地方。

现在,在上述情况下,摄像头将在2秒钟内从其原始位置移至Vector3.zero(原点)。

我建议您避免使用Update进行过渡。只是行不通。

如果您需要对协程的更深入了解,请访问以下博客 http://www.theappguruz.com/blog/how-to-use-coroutines-in-unity