INNER JOIN
我似乎遇到了一个不等待任何时间的问题。我还在using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy_Jump : MonoBehaviour {
Rigidbody2D rb;
[SerializeField]
private float jumpHeight;
[SerializeField]
private float jumpDelay;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody2D> ();
}
// Update is called once per frame
void Update () {
Jump ();
}
void Jump(){
StartCoroutine ("Wait");
rb.AddForce (new Vector2 (0, jumpHeight));
}
IEnumerator Wait(){
yield return new WaitForSeconds (jumpDelay);
Debug.Log ("waiting");
yield return 0;
}
}
函数中输入了一个设定的数字,但它仍然没有延迟任何内容。我不知道任何其他方式,也没有通过在线搜索找到任何其他方式延迟功能。
答案 0 :(得分:1)
尝试移动在协程中添加力的位置。当你在更新功能中调用一个协程时,它基本上每帧都会调用一个新的协程,所以你需要某种方式知道你已经在等待。
bool isWaiting;
IEnumerator Wait(){
isWaiting = true;
Debug.Log ("waiting");
yield return new WaitForSeconds (jumpDelay);
rb.AddForce (new Vector2 (0, jumpHeight));
isWaiting = false;
}
因此,在调用新的协程
之前,你会检查isWaiting
是否为假
// Update is called once per frame
void Update () {
if (!isWaiting)
Jump ();
}
如果你想在每一定时间内做某事,你应该使用InvokeRepeating
。从Update函数调用协程不是一个好主意。
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody2D> ();
InvokeRepeating("Wait", 0, jumpDelay);
}
void Wait(){
rb.AddForce (new Vector2 (0, jumpHeight));
}