请观看video,并告诉我解决方法。谢谢。
当我的相机到达其最终位置时,布尔标志必须变为false。当前,该标志变为true,并且保持为true。我需要找到一种方法,当我的相机移到其第一个目的地时,标志变为假,依此类推。
代码如下:
num_sell
答案 0 :(得分:1)
您没有在任何地方将其设置为 false
您真的不要在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。
补间:
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