在Unity中闪烁游戏对象

时间:2014-02-05 13:32:43

标签: c# unity3d unityscript ngui

如何使用SetActiveRecursively(Moment = 1秒)在Unity中创建闪烁对象。

我的例子(更改):

public GameObject flashing_Label;

private float timer;

void Update() {

while(true)
{
flashing_Label.SetActiveRecursively(true);
timer = Time.deltaTime;

  if(timer > 1)       
          {
            flashing_Label.SetActiveRecursively(false);
            timer = 0;        
          }   
 }

}

4 个答案:

答案 0 :(得分:5)

使用InvokeRepeating

public GameObject flashing_Label;

public float interval;

void Start()
{
    InvokeRepeating("FlashLabel", 0, interval);
}

void FlashLabel()
{
   if(flashing_Label.activeSelf)
      flashing_Label.SetActive(false);
   else
      flashing_Label.SetActive(true);
}

答案 1 :(得分:1)

您可以使用Coroutines和新的Unity 4.6 GUI轻松实现此目的。在这里查看这篇伪造文本的文章。你可以轻松地为游戏对象轻松修改它

Blinking Text - TGC

如果您只需要代码,请转到

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class FlashingTextScript : MonoBehaviour {
Text flashingText;
void Start(){
//get the Text component
flashingText = GetComponent<Text>();
//Call coroutine BlinkText on Start
StartCoroutine(BlinkText());
}
//function to blink the text
public IEnumerator BlinkText(){
//blink it forever. You can set a terminating condition depending upon your requirement
while(true){
//set the Text's text to blank
flashingText.text= "";
//display blank text for 0.5 seconds
yield return new WaitForSeconds(.5f);
//display “I AM FLASHING TEXT” for the next 0.5 seconds
flashingText.text= "I AM FLASHING TEXT!";
yield return new WaitForSeconds(.5f);
}
}
}
P.S:虽然它似乎是一个无限循环,通常被认为是一种糟糕的编程习惯,但在这种情况下,它可以很好地工作,因为一旦对象被销毁,MonoBehaviour就会被销毁。此外,如果您不需要它永远闪存,您可以根据您的要求添加终止条件。

答案 2 :(得分:0)

查看统一WaitForSeconds功能。

通过int param。 (秒),你可以切换你的gameObject。

bool fadeIn = true;

IEnumerator Toggler()
{
    yield return new WaitForSeconds(1);
    fadeIn = !fadeIn;
}

然后按StartCoroutine(Toggler())调用此函数。

答案 3 :(得分:0)

简单的方法是使用 InvokeRepeating() 和 CancelInvoke() 方法。

  1. InvokeRepeating("BlinkText",0,0.3) 将每隔 0.03 时间间隔重复调用 BlinkText()。
  2. CancelInvoke("BlinkText") 将停止重复调用。

示例如下:

//Call this when you want to start blinking
InvokeRepeating("BlinkText", 0 , 0.03f);

void BlinkText() {
    if(Title.gameObject.activeSelf)
        Title.gameObject.SetActive(false);
    else
        Title.gameObject.SetActive(true);
}

//Call this when you want to stop blinking
CancelInvoke("BlinkText");

Unity Documentation