在Unity3D上同时旋转和计时

时间:2015-03-02 03:09:20

标签: c# unity3d 2d

我有一个项目,我在5秒后翻转一张卡,然后我想开始一个x秒的倒数计时器。在x秒后,卡片再次翻转。

我找到了计时器here的一个很好的例子,但它在Update()方法中有效。我的问题来自于卡的旋转也在Update()方法内部。

如果我将计时器放在Update()方法中,只要调用Update()方法,计时器就会启动,我不想让它在调用Update()方法时立即启动它,但是当我想要开始ip时,我翻转卡片后60秒。

如果我将计时器放在Update()以外的方法中,则计时器启动但不会减少。

 using UnityEngine;
 using System.Collections;
 public class Juego1Carta2 : MonoBehaviour
 {
     public float velocidadDeRotacion = 100.0f;
     public Sprite cartaBase;
     public Sprite cartaDelantera;
     private bool carta2Activada = false;
     private bool cartaDeLado = false;
     float tiempoDeJuego = 2;
     IEnumerator Esperar()
     {
         yield return new WaitForSeconds(5);
         transform.position = new Vector3(Screen.width / 2, Screen.height / 2 +GetComponent<SpriteRenderer>().bounds.size.y, 0);
         carta2Activada = true;
         Regresa();
     }
void Regresa()
{
    Update();
}
// Use this for initialization
void Start ()
{
    StartCoroutine (Esperar());
}
// Update is called once per frame
void Update ()
{
    if (carta2Activada)
    {
        transform.Rotate(Vector3.up * Time.deltaTime * velocidadDeRotacion);
        if (transform.eulerAngles.y >= 90)
        {
            SpriteRenderer Carta = GetComponent<SpriteRenderer>();
            if (Carta.sprite == cartaBase)
            {
                Carta.sprite = cartaDelantera;
                cartaDeLado = true;
                carta2Activada = false;
            }
            else
            {
                Carta.sprite = cartaBase;
                cartaDeLado = true;
                carta2Activada = false;
            }
            tiempoDeJuego = 60;
        }
    }
    tiempoDeJuego -= Time.deltaTime;
    if (tiempoDeJuego <= 0)
    {
        print("Fin del tiempo");
    }
    if (cartaDeLado)
    {
        transform.Rotate(Vector3.up * Time.deltaTime * velocidadDeRotacion);
        if (transform.eulerAngles.y >= 180)
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
            cartaDeLado = false;
            carta2Activada = false;
            return;
        }
     }
   }
}

有没有办法旋转卡片并同时制作倒数计时器?

对不起,也许这是一个非常明显的问题,但连续3天工作之后,我不仅仅是倦怠......

1 个答案:

答案 0 :(得分:0)

在这个if语句中使用你设置定时器的时间来执行60秒后的代码,如果我理解你的问题就是这样的话

if (cartaDeLado)
    {
        if (tiempoDeJuego <= 0){ // dont execute any of the code unless 60 
                                 // seconds is up
        transform.Rotate(Vector3.up * Time.deltaTime * velocidadDeRotacion);
        if (transform.eulerAngles.y >= 180)
        {
            transform.eulerAngles = new Vector3(0, 0, 0);
            cartaDeLado = false;
            carta2Activada = false;
            return;
        }
        }
     }