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