c# - 协程只执行一次
问题描述
我有一个游戏,汽车在路上行驶,路上有触发器。目的是检测汽车何时进入这些触发器并根据触发器执行操作。
对于我遇到问题的那个,相机应该慢慢地移向第二个位置,该位置位于汽车后面并略高于汽车。
这是我尝试过的:
private void OnTriggerEnter(Collider other)
{
if (other.attachedRigidbody.velocity.magnitude > 20.0f)
{
StartCoroutine(tst());
}
}
IEnumerator tst()
{
Camera cam = Camera.main;
Vector3 newPosition = cam.gameObject.transform.GetChild(0).position;
cam.transform.position = Vector3.MoveTowards(cam.transform.position, newPosition, camUnit);
yield return new WaitForSeconds(3);
}
camUnit 等于 1f 但问题是它没有移动到正确的位置,就像我只是将相机分配到与上面代码不同的视角的新位置一样,它是即时的并且移动速度不慢到下一个位置。
我究竟做错了什么?先感谢您。
解决方案
在yield
你退出协程之后。根据您的描述,您实际上希望以某种形式的循环,并且yield
在完成您需要做的事情之后。然后,在函数恢复后,您决定是再次执行并再次让步,还是继续朝着协程的出口前进。
bool isDone = false;
while(!isDone)
{
Camera cam = Camera.main;
Vector3 newPosition = cam.gameObject.transform.GetChild(0).position;
cam.transform.position = Vector3.MoveTowards(cam.transform.position, newPosition, camUnit);
yield return new WaitForSeconds(3);
isDone = EnsureCameraLocation(); // Do whatever check you need to do to figure out if the camera is where you want it yet
}
请注意,yield
is在语句中,while
这将使协程无缝。
推荐阅读
- prometheus - Prometheus/PromQL/Grafana:右侧范围向量可能不存在时的减法
- google-colaboratory - 如何增加 Google Colab 存储容量
- python - 将 pandas DataFrame 有条件地分成两组
- java - 如何合并 ArrayList 中的对象?
- javascript - 使用 Puppeteer 执行多个 page.hover()
- java - 即使使用了 JDK 8,Launch4j 也不会在 github 操作上运行
- java - 调试失败的 SSL 握手时,如何在文件中捕获 Java 控制台的输出?
- search - 将数据从 GCS 批量迁移到 Solr
- python - 在 Python 中通过鼠标单击添加到列表
- javascript - 删除函数触发 onLoad 而不是 onClick