为什么我的程序不会等待一段时间

时间:2017-04-16 01:02:12

标签: unity3d delay

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; } } 函数中输入了一个设定的数字,但它仍然没有延迟任何内容。我不知道任何其他方式,也没有通过在线搜索找到任何其他方式延迟功能。

1 个答案:

答案 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));
}

InvokeRepeating Documentation