GUI.Label при входе в триггер - Форум Игроделов
Пт, 17 Май 2024, 07:31 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » GUI.Label при входе в триггер
GUI.Label при входе в триггер
mikhachДата: Вт, 07 Апр 2015, 20:01 | Сообщение # 1
Нет аватара
 
Сообщений: 20
Награды: 0
Репутация: 0
Статус: Offline
Здравствуйте. Помогите с проблемой. Не знаю как сделать вывод GUI.Label при входе в триггер.
Делаю так:
Код
private bool boolean;
    public GameObject Player;

    void OnTriggerEnter2D(Collider2D other)
    {
       if (other.tag == "Player")
         boolean = true;
     Debug.Log (boolean);
     }
       

    void OnGUI(){
    if (boolean == true){
      if (GUI.Label (new Rect (0, Screen.height/1.1f, 500,20), "Что это за странный туман, откуда он?"))
      {boolean = false;
     Destroy(gameObject);}
        
       
}
}

Выдает ошибку: Cannot implicitly convert type `void' to `bool'. Как сделать этот вывод не доходит.

З.ы.
Разобрался в своем глуме.
Код
void OnGUI(){
   if (boolean == true){
     GUI.Label (new Rect (0, Screen.height/1.1f, 500,20), "Что это за странный туман, откуда он?");
       
}
}

Но встал другой вопрос. Как убирать этот GUI через несколько секунд после появления и показывать другой? Подскажите.


Сообщение отредактировал mikhach - Вт, 07 Апр 2015, 20:29
 
СообщениеЗдравствуйте. Помогите с проблемой. Не знаю как сделать вывод GUI.Label при входе в триггер.
Делаю так:
Код
private bool boolean;
    public GameObject Player;

    void OnTriggerEnter2D(Collider2D other)
    {
       if (other.tag == "Player")
         boolean = true;
     Debug.Log (boolean);
     }
       

    void OnGUI(){
    if (boolean == true){
      if (GUI.Label (new Rect (0, Screen.height/1.1f, 500,20), "Что это за странный туман, откуда он?"))
      {boolean = false;
     Destroy(gameObject);}
        
       
}
}

Выдает ошибку: Cannot implicitly convert type `void' to `bool'. Как сделать этот вывод не доходит.

З.ы.
Разобрался в своем глуме.
Код
void OnGUI(){
   if (boolean == true){
     GUI.Label (new Rect (0, Screen.height/1.1f, 500,20), "Что это за странный туман, откуда он?");
       
}
}

Но встал другой вопрос. Как убирать этот GUI через несколько секунд после появления и показывать другой? Подскажите.

Автор - mikhach
Дата добавления - 07 Апр 2015 в 20:01
QNicolyaДата: Вт, 07 Апр 2015, 21:16 | Сообщение # 2
God gave Rock'N'Roll to you
 
Сообщений: 3369
Награды: 3
Репутация: 352
Статус: Offline
Код

float time = 2f;
void OnUpdate()
{
   if(time >= 0 && boolean)
     time -= Time.deltaTime;
   else {boolean == false)
}


Так он уберется через 2 секунды. А как сделать другой, думаю, догадаешься)


Если человек вас обманул - он мошенник, если он вас обманул дважды - вы дурак.
 
Сообщение
Код

float time = 2f;
void OnUpdate()
{
   if(time >= 0 && boolean)
     time -= Time.deltaTime;
   else {boolean == false)
}


Так он уберется через 2 секунды. А как сделать другой, думаю, догадаешься)

Автор - QNicolya
Дата добавления - 07 Апр 2015 в 21:16
mikhachДата: Вт, 07 Апр 2015, 21:48 | Сообщение # 3
Нет аватара
 
Сообщений: 20
Награды: 0
Репутация: 0
Статус: Offline
QNicolya, спасибо, пришлось немного подправить:
Код
float time = 2f;   
   void Update()   
   {   
    if (time >= 0 && boolean)  
        time -= Time.deltaTime;   
       
      
    else {boolean = false;}
    }

С OnUpdate() не заработало и не нашел я что-то такой функции в мануале.

А как после этого таймера показать другую надпись в GUI?


Сообщение отредактировал mikhach - Вт, 07 Апр 2015, 21:49
 
СообщениеQNicolya, спасибо, пришлось немного подправить:
Код
float time = 2f;   
   void Update()   
   {   
    if (time >= 0 && boolean)  
        time -= Time.deltaTime;   
       
      
    else {boolean = false;}
    }

С OnUpdate() не заработало и не нашел я что-то такой функции в мануале.

А как после этого таймера показать другую надпись в GUI?

Автор - mikhach
Дата добавления - 07 Апр 2015 в 21:48
AswoДата: Вт, 07 Апр 2015, 22:53 | Сообщение # 4
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
mikhach, я бы остановился на использование корутин.
Код

      private bool boolean;
      public GameObject Player;
      private string message = "";

      void OnTriggerEnter2D(Collider2D other)
      {
          if (other.tag == "Player")
          {
              string[] messages = new string[]
              {
                  "Что это за странный туман, откуда он?",
                  "ЁЖИК!"
              };
              StartCoroutine(SetMessage(2f, messages));
          }
          Debug.Log(boolean);
      }

      void OnGUI()
      {
          GUI.Label(new Rect(0, Screen.height / 1.1f, 500, 20), message);   
      }

      IEnumerator SetMessage(float time, string[] msgs)
      {
          foreach(string msg in msgs)
          {
              message = msg;
              yield return new WaitForSeconds(time);
          }
          message = "";
      }


Когда необходимо вызвать несколько текстовых сообщений, формируем массив строк:

Код
            string[] messages = new string[]
              {
                  "Что это за странный туман, откуда он?",
                  "ЁЖИК!"
              };

И вызываем SetMessage через
Код

StartCoroutine(SetMessage(2f, messages));

2f - это время, которое сообщение будет показывается. В данном случае 2 секунды.


end.
 
Сообщениеmikhach, я бы остановился на использование корутин.
Код

      private bool boolean;
      public GameObject Player;
      private string message = "";

      void OnTriggerEnter2D(Collider2D other)
      {
          if (other.tag == "Player")
          {
              string[] messages = new string[]
              {
                  "Что это за странный туман, откуда он?",
                  "ЁЖИК!"
              };
              StartCoroutine(SetMessage(2f, messages));
          }
          Debug.Log(boolean);
      }

      void OnGUI()
      {
          GUI.Label(new Rect(0, Screen.height / 1.1f, 500, 20), message);   
      }

      IEnumerator SetMessage(float time, string[] msgs)
      {
          foreach(string msg in msgs)
          {
              message = msg;
              yield return new WaitForSeconds(time);
          }
          message = "";
      }


Когда необходимо вызвать несколько текстовых сообщений, формируем массив строк:

Код
            string[] messages = new string[]
              {
                  "Что это за странный туман, откуда он?",
                  "ЁЖИК!"
              };

И вызываем SetMessage через
Код

StartCoroutine(SetMessage(2f, messages));

2f - это время, которое сообщение будет показывается. В данном случае 2 секунды.

Автор - Aswo
Дата добавления - 07 Апр 2015 в 22:53
mikhachДата: Ср, 08 Апр 2015, 10:15 | Сообщение # 5
Нет аватара
 
Сообщений: 20
Награды: 0
Репутация: 0
Статус: Offline
Aswo, большое спасибо, все отлично работает. Плюс открыл для себя коротин.
 
СообщениеAswo, большое спасибо, все отлично работает. Плюс открыл для себя коротин.

Автор - mikhach
Дата добавления - 08 Апр 2015 в 10:15
Форум Игроделов » UNITY3D » СКРИПТИНГ » GUI.Label при входе в триггер
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024