Порядок выполнения скриптов

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Порядок выполнения скриптов

Сообщение MorfixProton 09 мар 2019, 19:27

Здравствуйте форумчане)

У меня есть 2 скрипта:
CharacterHead
и
UIBattleController

В самой игре мы тычем мышкой по игровому полю и персонаж стреляет, но я сейчас делаю так, чтобы когда я нажимаю на кнопки ГУИ персонаж не реагировал бы.
Для этого я сделал:
1) В скрипте, где обрабатываются кнопки я создал булеву переменную, а в методе Down у кнопок эта переменная становится ТРУ, а в методе Up переменная становится ФОЛС.
Например, кнопка выбора пистолета:

Синтаксис:
Используется csharp
public void ButtonPistolDown (){
        _anyButtonDown = true;
        Debug.Log("1");
        if (_weaponSelector != 0) {
                        _imageWeaponPistol.sprite = _spritePicturePistolDown;
                }
        }
        public void ButtonPistolUp (){
        _anyButtonDown = false;
        _imageWeaponPistol.sprite = _spritePicturePistolUp;
        }
        public void ButtonPistolClick (){
                _weaponSelector = 0;
                //_characterHead._timeTilNextFire = 0;
        }


_anyButtonDown и есть та переменная.

2) А в скрипте персонажа я в условии при котором персонаж должен стрелять я воткнул:

Синтаксис:
Используется csharp
if (Input.GetMouseButton (0)  && _UIBattleController._timerMenuGUI == 4 && !_fightGUI.activeSelf && if (Input.GetMouseButton (0)  && _UIBattleController._timerMenuGUI == 4 && !_fightGUI.activeSelf && !_UIBattleController._anyButtonDown) {) {
Debug.Log("2");
//ПИФ-ПАФ
}


То есть по задумке, когда кто-то пытается нажать на кнопку, то переменная _anyButtonDown становится ТРУ, и в условии стрельбы не должна пропустить исполнение блока выстрела, но мать его за ногу, персонаж успевает разочек выстрелить...

Тогда я сделал приоритет выполнения скриптов:
Изображение
Мы видим, что скрипт ГУИ выполняется ПЕРВЕЕ скрипта ПЕРСОНАЖА, к тому же я делал Debug.Log("1"); и Debug.Log("2");, угадайте, что происходит))) Правильно, сначала в консоли пишется 2, происходит выстрел, а потом пишется 1.

Помогите пожалуйста, в чем дело-то?
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Порядок выполнения скриптов

Сообщение MorfixProton 09 мар 2019, 19:40

Я так думаю это происходит из-за того, что у кнопок есть компонент EventTriggerScript, в этом скрипте и происходит вызов метода Down (нажатия кнопки), но тогда как заставить скрипт из этого компонента выполняться первым??? [curved_hands]
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Порядок выполнения скриптов

Сообщение MorfixProton 09 мар 2019, 20:06

Вопрос остается открытым, но выкрутился я так:

Я создал переменную типа флоат, она равна оооооочень маленькому числу, но достаточно большому, чтобы успел выполниться скрипт. Когда я нажимаю СТРЕЛЯТЬ, то переменная уменьшается по времени, после того как переменная станет 0 происходит выстрел, этой задержки человек не заметит, но вот когда я нажимаю кнопку, срельба не успевает начаться до того как сработает скрипт обработки кнопки компонента EventTrigger, этот скрипт срабатывает, после чего выполняется скрипт ГУИ, где запрещается стрельбы когда мы тыкаем кнопку ГУИ и собсно данный костыль решил мою проблему, но на слабых устройствах эта задержка по времени нужна поболее, а значит игрок может начать ее замечать. Поэтому вопрос остается открыт:
КАК НАЗНАЧИТЬ ПРИОРИТЕТ ВЫПОЛНЕНИЯ СКРИПТУ ИЗ КОМПОНЕНТА EventTrigger???
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Порядок выполнения скриптов

Сообщение 1max1 09 мар 2019, 20:40

Узнать находится ли поинтер на кнопки и заблокировать выстрел можно и попроще))
https://docs.unity3d.com/ScriptReferenc ... bject.html
Синтаксис:
Используется csharp
if (!EventSystem.current.IsPointerOverGameObject())
{
    Fire();
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Порядок выполнения скриптов

Сообщение MorfixProton 09 мар 2019, 20:59

Чет не ясно как он работает, вот воткнул я это условие, но при этом если жмякаю на кнопку смены оружия, то все равно струляет.

Вот этот метод я так понимаю просто определяет, есть ли у объекта под курсором EventSystem, прально?
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Порядок выполнения скриптов

Сообщение 1max1 09 мар 2019, 22:43

Вот этот метод я так понимаю просто определяет, есть ли у объекта под курсором EventSystem, прально?

Он проверяет есть ли под курсором UI елемент.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Порядок выполнения скриптов

Сообщение MorfixProton 09 мар 2019, 23:20

Вот только мне так не подойдет... :(( :(( :(( У меня под курсором на весь экран панель растянута, не спрашивай зачем, НУЖНА!!!
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Порядок выполнения скриптов

Сообщение 1max1 09 мар 2019, 23:56

Еще можно кинуть рейкаст перед выстрелом и проверить есть ли кнопка на пути https://docs.unity3d.com/ScriptReferenc ... ycast.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Порядок выполнения скриптов

Сообщение AngryCat 11 мар 2019, 22:50

MorfixProton писал(а):Вот только мне так не подойдет... :(( :(( :(( У меня под курсором на весь экран панель растянута, не спрашивай зачем, НУЖНА!!!

Могу костыль предложить
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Порядок выполнения скриптов

Сообщение Rando_OM 12 мар 2019, 16:10

MorfixProton писал(а):Вот только мне так не подойдет... :(( :(( :(( У меня под курсором на весь экран панель растянута, не спрашивай зачем, НУЖНА!!!

Вроде как панель не считается помехой, или там можно в игнор ее поставить, точно не уверен
Мои игры доступны онлайн на Kongregate.com! ---->>
Rando_OM
UNIт
 
Сообщения: 94
Зарегистрирован: 22 дек 2015, 03:44
Откуда: Россия
Skype: gorodok402
  • Сайт

Re: Порядок выполнения скриптов

Сообщение 1max1 12 мар 2019, 16:55

Rando_OM писал(а):
MorfixProton писал(а):Вот только мне так не подойдет... :(( :(( :(( У меня под курсором на весь экран панель растянута, не спрашивай зачем, НУЖНА!!!

Вроде как панель не считается помехой, или там можно в игнор ее поставить, точно не уверен

Да, есть галочка рейкаст таргет.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

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

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


cron