【发布时间】:2020-03-18 15:31:17
【问题描述】:
我正在努力实现最简单的事情。我有平滑移动对象的代码,并且我希望它停止在与单击按钮时对象所在位置相关的特定距离处。所以我不能将位置存储在任何更新每一帧的函数中。目前,对象只是开始移动并且不会停止。
void Update()
{
Vector3 targetPosition = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z);
if (movement == true)
{
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, targetPosition, step);
}
}
public void coroutineStarter()
{
float targetPosition = transform.position.x - 1;
StartCoroutine(OnClick(targetPosition));
}
IEnumerator OnClick(float targetPosition)
{
if (transform.position.x != targetPosition)
{
movement = true;
}
else
{
movement = false;
yield return null;
}
}
}
我应该指定按下按钮启动coroutineStarter。我尝试使用 while 循环而不是 OnClick 中的 if 语句,但显然在任何地方使用 while 循环都会冻结统一,如果它是无限的,如果不是,它会在循环期间冻结统一。
【问题讨论】:
-
如果你在其中
yield return null;,它不会冻结 Unity .. 这会告诉 Unity 暂停例程,渲染帧并在下一帧继续。
标签: c# loops unity3d coroutine