2014-11-17 52 views
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

这可以实现多种方式,但是,我会用它返回一个IEnumerator像这样的方法......

这里假设你有你的脚本变量必须被连接到该SpriteRenderer参考GameObject与此脚本。

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; 
} 

然后,您将使用适用的sprite作为变量调用此函数。

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

由于ChangeFace方法返回IEnumerator,我们必须使用StartCoroutine函数调用该函数。该方法将运行,直到达到yield返回新的WaitForSeconds(1.0f)函数,然后等待1.0f秒,然后恢复上次停止的位置。

明白吗?

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

-1

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

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

当您将精灵设置为“欢乐的脸”时,也设置happyTimer = 1。这将从下一个Update呼叫开始倒计时。

Update相关部分应该是这样的:

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