web-dev-qa-db-ja.com

C#で3秒間待ってからブールをtrueに設定するにはどうすればよいですか?

私のスクリプト/ゲーム/ものはゲームオブジェクトを右に移動させ、ダンス(作成したボタン)をクリックすると停止します。その後、カウンター(カウンターは必要ないかもしれませんが、3秒待機します)が3に達すると(ダンスをクリックするとカウンターが開始します)、ゲームオブジェクトは右に進み続けると仮定します。

コードを修正できるとすれば、それは素晴らしいことです。あなたがそれを修正し、私に間違ったことを説明できるなら、それはさらに素晴らしいでしょう。 UnityでC#の学習を始めました。

using System;
using UnityEngine;
using System.Collections;

public class HeroMouvement : MonoBehaviour
{
    public bool trigger = true;
    public int counter = 0;
    public bool timer = false;

    // Use this for initialization

    void Start()
    {
    }

    // Update is called once per frame

    void Update()
    {  //timer becomes true so i can inc the counter

        if (timer == true)
        {
            counter++;
        }

        if (counter >= 3)
        {
            MoveHero();//goes to the function moveHero
        }

        if (trigger == true)
            transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
    }

    //The button you click to dance 
    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
        {
            trigger = false;
            timer = true;//now that the timer is set a true once you click it,The uptade should see that its true and start the counter then the counter once it reaches 3 it goes to the MoveHero function      
        }
    }

    void MoveHero()
    {  //Set the trigger at true so the gameobject can move to the right,the timer is at false and then the counter is reseted at 0.
        trigger = true;
        timer = false;
        counter = 0;
    }
}
16
Froob

コルーチンを使用すると、非常に簡単に実行できます。

void Update()
{
    if (trigger == true)
        transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
}

void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
        {  
           StartCoroutine(DoTheDance());
        }
    }


 public IEnumerator DoTheDance() {
    trigger = false;
    yield return new WaitForSeconds(3f); // waits 3 seconds
    trigger = true; // will make the update method pick up 
 }

コルーチンとその使用方法の詳細については、 http://docs.unity3d.com/Documentation/ScriptReference/index.Coroutines_26_Yield.html を参照してください。定期的な一連のイベントを実行しようとするとき、彼らはかなりきちんとしています。

15
Jan Thomä

Invokeを使用するのが最も簡単な方法だと思います。

nity3D Invoke

if (timer == true) Invoke("MoveHero", 3);
10
vicman4

ここにあるリンクは、StartCoroutineを使用することを好みます: http://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html

例:

   void Foo () { StartCoroutine (Begin ()); }

   IEnumerator Begin ()
    {
        yield return new WaitForSeconds (3);

         // Code here will be executed after 3 secs
        //Do stuff here
    }
4
Basil Mariano

まず、カウンターをフロートにします。次に、counter++;からcounter += Time.deltaTime。 Update()はフレームごとに呼び出されるため、カウンターは3番目のフレームで3になります。 Time.deltaTimeは、このフレームと前のフレームの間の時間を提供します。合計すると、タイマーのように機能します。

3
Andrew Ngo