2017-04-16 9 views
-1
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; 
    } 
} 

私はそれが少しの時間を待っていない問題があるようです。私はwaitForSeconds機能にも設定番号を入力しましたが、それでも何も遅延させません。私は他の方法を知らないし、オンライン検索を介して他の方法で機能を遅らせることもできない。なぜ私のプログラムは時間がかかりません

+1

courotineは、あなたのrb.AddForceラインには影響を与えません。 courotine candはその中のコードだけを遅らせ、Jump()はクロトロンからは呼び出されず、すべてのフレームと呼ばれる更新から呼び出されます。 –

答えて

1

コルーチンに力を加える場所を移動してみてください。また、更新機能でコルーチンを呼び出すと、基本的には各フレームに新しいコルーチンが呼び出されますので、すでに待機していることを知る方法が必要です。

bool isWaiting; 
IEnumerator Wait(){ 
    isWaiting = true; 

    Debug.Log ("waiting"); 
    yield return new WaitForSeconds (jumpDelay); 

    rb.AddForce (new Vector2 (0, jumpHeight)); 

    isWaiting = false; 
} 

isWaitingは、あなたが何かの時間のすべての一定量を行いたい場合は、おそらくInvokeRepeatingを使用する必要があります

// Update is called once per frame 
void Update() { 
    if (!isWaiting) 
     Jump(); 
} 

新しいコルーチンを呼び出す前に、偽であれば、あなたはチェックします。 Update関数からコルーチンを呼び出すのは良い考えではありません。

// Use this for initialization 
void Start() { 
    rb = GetComponent<Rigidbody2D>(); 

    InvokeRepeating("Wait", 0, jumpDelay); 
} 

void Wait(){ 

    rb.AddForce (new Vector2 (0, jumpHeight)); 
} 

InvokeRepeating Documentation

+0

残念ながら、私はそれも試みましたが、それはまだ時間を待っていません。 – Camman012

+0

@ Camman012また、 'Jump'関数で' rb.AddForce(new Vector2(0、jumpHeight)); 'を削除する必要があります。 – CNuts

+0

@ Camman012私の編集をチェックするには、 'InvokeRepeating'を使ってください。 – CNuts

関連する問題