c# - 在统一C#中等待航路点的时间量
问题描述
我在 Unity 2D 项目中有一个航点系统,其中 GameObject 将按顺序跟随每个航点,然后重复该过程,我希望 GameObject 在每个点停止一段固定的时间,我想我可以使用协程但不完全确定如何实现这一点,到目前为止我所做的是创建一个名为 WaitAtPoint 的协程,然后在每个航路点移动时调用它,但无济于事,不确定我做错了什么。
public class BrainBoss : MonoBehaviour {
[SerializeField]
Transform[] waypoints;
[SerializeField]
float moveSpeed = 2f;
int waypointIndex = 0;
// Start is called before the first frame update
void Start()
{
transform.position = waypoints[waypointIndex].transform.position;
}
// Update is called once per frame
void Update()
{
Move();
}
void Move()
{
transform.position = Vector2.MoveTowards(transform.position,
waypoints[waypointIndex].transform.position, moveSpeed * Time.deltaTime);
if(transform.position == waypoints[waypointIndex].transform.position)
{
StartCoroutine(WaitAtPoint());
waypointIndex += 1;
}
if(waypointIndex == waypoints.Length)
{
waypointIndex = 1;
}
}
IEnumerator WaitAtPoint()
{
yield return new WaitForSeconds(3f);
}
}
解决方案
好吧,你WaitAtPoint
目前并没有做很多事情。这是因为它在 IEnumerator 内部等待,而不是在您调用它的位置。
有多种方法可以解决这个问题,但我建议callback
在等待时间后执行的 IEnumerator 上使用。
像这样:
private bool isWaiting;
void Update() {
if (!isWaiting) {
Move();
}
}
void Move()
{
transform.position = Vector2.MoveTowards(transform.position,
waypoints[waypointIndex].transform.position, moveSpeed * Time.deltaTime);
if(transform.position == waypoints[waypointIndex].transform.position)
{
StartCoroutine(WaitAtPoint(() =>
{
// All code that should be executed after waiting here.
waypointIndex += 1;
}));
}
if(waypointIndex == waypoints.Length)
{
waypointIndex = 1;
}
}
IEnumerator WaitAtPoint(Action callback)
{
isWaiting = true;
yield return new WaitForSeconds(3f);
callback.Invoke();
isWaiting = false;
}
推荐阅读
- flow-project - 无法从流程示例文件夹运行 sugiyama.py 示例
- css - 我在将 CSS 应用到我的 HTML 时遇到问题
- windows - CultureInfo 的 NumberFormat.PercentPositivePattern 在我的 Windows 10 机器上已更改
- typescript - 将泛型分配给 rest 参数并具有可选/默认参数
- api - Flutter FutureBuilder 返回空数据
- machine-learning - 我应该如何将 Keras 的 ImageDataGenerator 的预处理参数与数据增强参数分开
- c++ - 使用 memory_order_relaxed 如何在典型架构上保证原子变量的修改总顺序?
- r - 可以在 R 中的地图上覆盖线图吗?
- java - 重启 Spring Boot 应用程序
- javascript - 用 Javascript 创建数组,带键