How to make a delay with C# in Unity3D?

后端 未结 3 889
北海茫月
北海茫月 2021-01-26 02:14

I just started to learn c# in unity. I followed a tutorial, but i wanna add some things.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

pub         


        
相关标签:
3条回答
  • 2021-01-26 02:29

    I can assume that it's a windows-forms application so that you're better not to use Thread.Sleep as it will block the UI thread.

    Instead, use: System.Windows.Forms.Timer

    0 讨论(0)
  • 2021-01-26 02:35

    Use Coroutine (as I see this is Unity3D code):

    void OnTriggerEnter(Collider other) 
        {
            if (other.gameObject.CompareTag ( "Pick Up"))
            {
                other.gameObject.SetActive (false);
                count = count + 1;
                StartCoroutine(SetCountText ());
            }
        }
    
        IEnumerator SetCountText ()
        {
            countText.text = "Count: " + count.ToString ();
            if (count >= 1)
            {
                winText.text = "You Win!";
                yield return new WaitForSeconds(1f);
                Application.LoadLevel(1);
            }
        }
    
    0 讨论(0)
  • 2021-01-26 02:44

    In Unity waits are usually done with help of a WaitForSeconds class.

    In your case you will have to change OnTriggerEnter and SetCountText a bit so that they return IEnumerable type:

    IEnumerable OnTriggerEnter(Collider other) 
    {
        if (other.gameObject.CompareTag ( "Pick Up"))
        {
            other.gameObject.SetActive (false);
            count = count + 1;
            yield return SetCountText ();
        }
    }
    
    IEnumerable SetCountText ()
    {
        countText.text = "Count: " + count.ToString ();
        if (count >= 1)
        {
            winText.text = "You Win!";
            yield return new WaitForSeconds(5); // Wait for seconds before changing level
            Application.LoadLevel(1);
        }
    }
    
    0 讨论(0)
提交回复
热议问题