0

Unity2D で簡単なゲームを開発しています。このゲームでは、いくつかのモンスターがドラッグされたものを食べます。正しいオブジェクトをモンスターにドラッグすると、スコアが 1 つ上がり、モンスターは幸せそうな顔をするはずです。そうでない場合、スコアが下がり、悲しい顔をします。これは私がそのために使用しているコードです(幸せ/悲しいへの移行を差し引いたもの):

 if (transform.name.Equals ("yellow")){

        if (collinfo.name.Equals ("plastic(Clone)")) {
            Debug.Log ("+1");
            audio.Play ();
            GameSetup.playerScore += 1;
            gs.GetComponent<GameSetup>().removeit(aux);             
        } 
        else {
            Debug.Log ("-1");
            audio.Play ();
            if (GameSetup.playerScore == 0)
            {}
            else
            {
            GameSetup.playerScore -= 1;
            }
            gs.GetComponent<GameSetup>().removeit(aux);
        }

再生される音声は、ただの「むしゃむしゃ」音です。

モンスターのスプライトを happyFace に変更し (GameObject.GetComponent ().sprite = happyFace 経由)、1 秒待ってから通常のスプライトに戻すようにしたいのですが、その待機期間を実装する方法がわかりません。

ありとあらゆる助けをいただければ幸いです。

4

2 に答える 2

1

これはいくつかの方法で実装できますが、私なら IEnumerator を返すメソッドを使用します…</p>

これは、このスクリプトで GameObject にアタッチされた SpriteRenderer への参照を持つスクリプト内の変数があることを前提としています。

SpriteRenderer sr = GetComponent <SpriteRenderer> ();

また、元のスプライトと、変数として変更できるスプライトもあると仮定します。

public Sprite originalSprite;
public Sprite happyFaceSprite;
public Sprite sadFaceSprite;

public IEnumerator ChangeFace (Sprite changeToSprite)
{
    sr.sprite = changeToSprite;
    yield return new WaitForSeconds (1.0f);
    sr.sprite = originalFaceSprite;
}

次に、該当するスプライトを変数としてこの関数を呼び出します。

if (happy)
    StartCoroutine (ChangeFace (happyFaceSprite);
else
    StartCoroutine (ChangeFace (sadFaceSprite);

ChangeFace メソッドは IEnumerator を返すため、StartCoroutine 関数を使用してその関数を呼び出す必要があります。メソッドは、yield return new WaitForSeconds (1.0f) 関数に到達するまで実行され、その後 1.0f 秒待機してから、前回停止した場所から再開します。

理解?

これをテストしていないことに注意してください。ただし 、なぜ機能しないのかわかりません。

于 2014-11-17T09:03:42.257 に答える
-1

モンスターコントローラーに浮動小数点変数を入れて、それを呼び出すhappyTimerか、何かを呼び出します。ゼロから開始する必要があります。

次に、Update関数でチェックする必要happyTimerがあるのはゼロより大きいです。そうである場合は、減算Time.deltaTimeして再度確認します。happyTimer2 番目のチェックで がゼロ以下の場合は、スプライトをリセットする関数を呼び出します。

スプライトを「ハッピーフェイス」に設定するときは、 も設定しhappyTimer = 1ます。Updateこれにより、次の呼び出しからカウントダウンが開始されます。

の関連部分は次のUpdateようになります。

if(happyTimer > 0) {
    happyTimer -= Time.deltaTime;
    if(happyTimer <= 0) {
        resetSprite();
    }
}
于 2014-11-17T20:17:45.880 に答える