如何在等待10秒后重置球

时间:2015-11-03 12:41:09

标签: c# unity3d

我试图在投球后让球重置10秒延迟 球正常休息。但如何延迟球重置请帮助我。 球重置太快了。 我也使用过这个功能,但它不能正常工作请帮助我 我正处于游戏阶段的最后阶段。

using UnityEngine;
using System.Collections;

public class Ball : MonoBehaviour {
public Vector3 launchVeclocity;
//private const float RESET_TIME = 5.0f; // time to be taken for reset 
public bool inPlay = false;

private Vector3 ballStartPos;
private Rigidbody rigidBody;
private AudioSource audioSource;

// Use this for initialization
void Start () {
    rigidBody = GetComponent<Rigidbody>();
    //rigidBody.useGravity = false;
    ballStartPos = transform.position;
}

public void Launch (Vector3 velocity)
{
    inPlay = true;

    rigidBody.useGravity = true;
    rigidBody.velocity = velocity;

    audioSource = GetComponent<AudioSource> ();
    audioSource.Play ();
}
void Update() {
    Waiting ();

}
public void Reset() {

    inPlay = false;
    //yield return new WaitForSeconds (5);


    transform.position = ballStartPos;
    transform.rotation = Quaternion.identity;
    rigidBody.velocity = Vector3.zero;
    rigidBody.angularVelocity = Vector3.zero;
    rigidBody.useGravity = false;

}

    IEnumerator Waiting ()
{
    Reset ();
    yield return new WaitForSeconds (10);
}




 }

4 个答案:

答案 0 :(得分:0)

你不应该像现在一样通过在Update()中调用它来解决每个帧上的协同程序(但这不是你提出的问题)。它实际上没有等待的原因是你直接调用Waiting()而不是使用StartCoroutine(Waiting())。

答案 1 :(得分:0)

我将假设Launch是抛出球的方法。

首先,从您的Waiting()方法移除对Update的来电,您不希望直接调用Waiting()方法。 您需要在Launch方法中启动Coroutine

public void Launch (Vector3 velocity)
{
    inPlay = true;

    rigidBody.useGravity = true;
    rigidBody.velocity = velocity;

    audioSource = GetComponent<AudioSource> ();
    audioSource.Play ();

    // start the Coroutine to introduce the reset delay
    StartCoroutine(Waiting()); 
}

IEnumerator Waiting ()
{
    // suspect executing in this routine for 10 seconds
    yield return new WaitForSeconds (10);
    // now call reset
    Reset();
}

答案 2 :(得分:0)

使用Invoke(),方便了。 你已经有了这个方法所以它只需要这个作为你的Launch()方法:

public void Launch (Vector3 velocity)
{
    inPlay = true;

    rigidBody.useGravity = true;
    rigidBody.velocity = velocity;

    audioSource = GetComponent<AudioSource> ();
    audioSource.Play ();
    Invoke("Reset", 10);
}

您可以摆脱整个Waiting()方法

答案 3 :(得分:0)

Systeam.Threading.Thread.Sleep

IEnumerator Waiting ()
{
    Reset ();
    yield return Thread.Sleep(10000); // In miliseconds.
}