[Решено] GUI onClick и Update Input.GetButtonDown("Fire1")

Графический интерфейс пользователя

[Решено] GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение segyrn 22 окт 2016, 18:52

Здравствуйте Форумчане.
Прошу помощи.
Делаю игру в которой ГГ при нажатии ЛКМ посылает снаряд в точку где была нажата клавиша, столкнулся с проблемой: повесил в канвас кнопку с паузой.
Когда тыкаю в кнопку ГГ разворачивается и стреляет, а затем наступает пауза.
Синтаксис:
Используется csharp
    public void onClickPause()
    {
        if (Time.timeScale > 0) {
            Time.timeScale = 0;
            mainMenu.SetActive(true);
        }
    }


Синтаксис:
Используется csharp
  void Update () {
        if (Input.GetButtonDown("Fire1")) {
            // повернуть голову в сторону выстрела

            if (!isShooting) {
                Vector2 mouseScreenPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                Vector2 direction = (mouseScreenPosition - (Vector2)heroTransform.position).normalized;
                heroTransform.up = direction;

                // бросить лапу
                LaunchCanon(mouseScreenPosition);
            }
        }
 


Подскажите как ставить на паузу без выстрела? Пробовал сначала isShooting в onClickPause менять, но результата не дало.
Последний раз редактировалось segyrn 23 окт 2016, 12:11, всего редактировалось 1 раз.
segyrn
UNец
 
Сообщения: 5
Зарегистрирован: 22 окт 2016, 18:41

Re: GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение samana 22 окт 2016, 20:55

А вот здесь есть интересная информация на вашу тему https://www.youtube.com/watch?v=EVZiv7DLU6E (на английском)
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение segyrn 23 окт 2016, 04:03

Спасибо, очень похоже, по результату отпишу.
По видео существует 3 решения проблемы:
1. Добавить такую проверку:
Синтаксис:
Используется csharp
if(!EventSystem.current.IsPointerOverGameObject())

В этом случае клик будет проверяться только когда мышь над объектом. Мне такой вариант не подходит (в игре механика упреждения).
Да и попробовав могу сказать, что теперь клик работает только на кнопках...
2. На объекте добавить EventTriger (через менеджер объектов юнити), и на камеру Physics Raycaster
Мне не помогло, опять же клик проходит не в объект.
3. Расширить скрипт клика IPointerClickHandler, и в него добавить обработчик клика, а на камеру Physics Raycaster
Не помогло, скрипт надо вешать на объект, а у меня объекта нет.
segyrn
UNец
 
Сообщения: 5
Зарегистрирован: 22 окт 2016, 18:41

Re: GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение samana 23 окт 2016, 11:10

Тогда попробуйте напрямую проверять - сталкивается ли луч от мышки с UI элементами, и если не сталкивается, то выполняйте нужные вам действия:

Синтаксис:
Используется csharp
using UnityEngine.EventSystems;
using System.Collections.Generic;

void Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        PointerEventData clickData = new PointerEventData(EventSystem.current);
        clickData.position = Input.mousePosition;
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(clickData, results);

        if (results.Count == 0)
        {
            // повернуть голову в сторону выстрела
        }
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение segyrn 23 окт 2016, 12:10

Спасибо! Действительно так работает.
Нужно будет почитать про raycast'ы
segyrn
UNец
 
Сообщения: 5
Зарегистрирован: 22 окт 2016, 18:41

Re: [Решено] GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение samana 23 окт 2016, 14:02

segyrn писал(а):Нужно будет почитать про raycast'ы

И про EventSystems)
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: [Решено] GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение segyrn 23 окт 2016, 17:40

samana писал(а):
segyrn писал(а):Нужно будет почитать про raycast'ы

И про EventSystems)

На самом деле много про чего, вот сейчас понял что рестарт не реализуем через одну сцену, сделал сцену первого меню, а в сцене игры меню паузы с возможность рестарта. Еще что нельзя вложить button в пустой объект (хотя подумал, может у gameObject надо удалить transform, но проверять завтра уже), чтобы сгруппировать несколько кнопок.
segyrn
UNец
 
Сообщения: 5
Зарегистрирован: 22 окт 2016, 18:41

Re: [Решено] GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение samana 23 окт 2016, 18:35

segyrn писал(а):Еще что нельзя вложить button в пустой объект

Можно вложить без проблем. Создаёте в Канвасе пустой объект и добавляете ему компонент кнопки, или создаёте UI кнопку и перетягиваете её в пустой объект на Канвасе.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: [Решено] GUI onClick и Update Input.GetButtonDown("Fire1")

Сообщение segyrn 24 окт 2016, 04:28

samana писал(а):
segyrn писал(а):Еще что нельзя вложить button в пустой объект

Можно вложить без проблем. Создаёте в Канвасе пустой объект и добавляете ему компонент кнопки, или создаёте UI кнопку и перетягиваете её в пустой объект на Канвасе.

Я создал пустой объект, у него есть геометрия transform, и вложенные кнопки. У вложенных кнопок якоря становятся привязанными к transform пустого объекта, либо надо привязку где-то переключить.
Это не критично, у меня всего 2 кнопки, да и не особо упорно ковырялся в этом направлении.
segyrn
UNец
 
Сообщения: 5
Зарегистрирован: 22 окт 2016, 18:41


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4