我正在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),等待一秒然后切换回它的正常精灵,但不知道如何实现等待期。
非常感谢任何和所有帮助。
答案 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();
}
}