2014-02-05 3 views
2

Как создать мигающий объект в Unity с помощью SetActiveRecursively (Moment = 1 second).Мигает GameObject в 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;   
      } 
} 

} 
+1

У вас есть бесконечный цикл. –

ответ

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

Посмотрите на единство WaitForSeconds функции.

Передача int param. (секунды), вы можете переключить свой gameObject.

bool fadeIn = true;

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

затем называть эту функцию StartCoroutine(Toggler()).

1

Вы можете использовать Сопрограммы и новый графический интерфейс Unity 4.6 для достижения этой цели очень легко. Проверьте эту статью здесь, которая фальсифицирует текст. Вы можете изменить его легко для GameObject легко

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

PS: Несмотря на то, что, кажется, бесконечный цикл, который, как правило, рассматривается в качестве плохая практика программирования, в этом случае она работает очень хорошо, так как MonoBehaviour будет уничтожен после уничтожения объекта. Кроме того, если вы не хотите, чтобы он мгновенно вспыхнул, вы можете добавить условие завершения, основанное на ваших требованиях.

Смежные вопросы