如何将精灵更改为另一个,然后在1秒后返回

时间:2014-11-17 01:46:33

标签: unity3d 2d sprite unity3d-2dtools

我正在Unity2D中开发一个简单的游戏,其中几个怪物吃掉被拖到它们身上的东西。如果将正确的物体拖到怪物身上,那么分数会上升一个,而怪物应该是一张快乐的脸,否则,分数会下降并且会让人感到悲伤。这是我正在使用的代码(减去过渡到快乐/悲伤):

 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),等待一秒然后切换回它的正常精灵,但不知道如何实现等待期。

非常感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:1)

这可以通过多种方式实现,但是,我会使用一个返回IEnumerator的方法,如此...

这假设您的脚本中有一个变量,该变量引用了使用此脚本附加到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秒,然后恢复上次停止的位置。

明白了吗?

注意 我还没有对此进行过测试,但我不明白为什么它不起作用。

答案 1 :(得分:-1)

在你的怪物控制器中放置一个浮点变量,称之为happyTimer或其他东西。它应该从零开始。

然后在Update函数中,您应该检查happyTimer是否高于零。如果是,则减去Time.deltaTime并再次检查。如果第二次检查happyTimer为零或更低,则调用重置精灵的函数。

当您将精灵设置为&#34; happy face&#34;时,还要设置happyTimer = 1。这将从下一个Update电话开始倒计时。

Update的相关部分如下所示:

if(happyTimer > 0) {
    happyTimer -= Time.deltaTime;
    if(happyTimer <= 0) {
        resetSprite();
    }
}