Перейти к содержимому
Zone of Games Forum
PermResident

Флудильня piton4 и компании

Рекомендованные сообщения

45 минут назад, Tirniel сказал:

Точнее снятием жёсткой привязки к нему при проверке подсветки элемента гуя

В юнити нельзя снять проверку. Там нету ни в настройках проектах, ни встроенными методами никак нельзя сказать игре не снимать фокус с кнопки, когда игрок щелкает мышкой в пустоту. Можно только скриптами возвращать фокус, но предотвратить отмену фокуса никак нельзя. Обычные игроки, ну кроме питона который даже 0.003мс обрабатывает в голове, не заметит что фокус вообще терялся. Но просто мне не понятно, почему оно так сделано, просто хоть в одной игре было так что кнопка теряла фокус если игрок тыкнул в пустоту мышкой? 

Я уже решил проблему. Кроме системы которая в каждом кадре ловит фокус обратно если он потерялся, у меня и так были кастомные фокусы, например по дефолту у меня когда игрок открывает меню, фокус сразу стоит на кнопке “Сохранить игру”. Потому что очевидно это будет самая частая кнопка используемая и удобно сразу чтобы фокус был на ней. Но в местах, где сохранение запрещено, и игрок открыл меню, фокус будет на “опциях”.

Суть не в том что я не знаю, как это решить. Я не знаю, зачем оно так по дефолту сделано, что когда игрок щелкает мышкой в пустоту фокус пропадает, почему юнитивский движок не дает возможности запретить терять фокус(только возвращать можно), и как с этим в других движках, так же реализовано?

 

Изменено пользователем Dusker

Поделиться сообщением


Ссылка на сообщение
41 минуту назад, Dusker сказал:

Там нету ни в настройках проектах, ни встроенными методами

Это не метод, это свойства самого элемента гуя. Когда добавляешь кнопку там или ещё что, то у этого дела кроме визуального отображения элемента гуя есть две составляющие: сам код и графическая менюшка со свойствами элемента гуя. Снять проверку можно как в коде гуя (если у тебя исходно эта проверка есть, то её можно и банально найти в коде этого элемента гуя и отредактировать или удалить), так и в свойствах в графической менюшке. В общем, примерно так же, как напрямую в самом билдере вне движков. В визуал студио примерно так же, только там нагромождений меню несколько побольше. В состав движков обычно входит для работы с кодом как раз визуал студио или его элементы, по крайней мере, когда речь о си шарп или плюсовой. Знаю, что в юнити как минимум возможно визуал студио интегрировать, у движка есть поддержка.

Открой какой-нибудь базовый урок по билдеру сишки касательно гуя, чтобы понимать, о чём я вообще говорю (из того, где нагляднее и быстрее понять общие принципы). В движках эти менюшки обычно тоже есть, разве что могут быть слегка заныканы. Но суть та же самая.

Не хотелось бы быть нудным, но это очередной случай касательно того, почему бы стоило всё-таки учить программирование по порядку. По итогу ты уже знаешь кучу разных профессиональных тонкостей, но при этом не знаешь каких-то основ, из-за чего опять возникают различные затыки.

Изменено пользователем Tirniel

Поделиться сообщением


Ссылка на сообщение

@Tirniel Я могу только сказать, то что уже говорил. В юнити нельзя, только если не пытаться переписать сам юнитивский движок. Если ты видел как в юнити это сделать — покажи.  Но если в анриле  можно просто где то галочку поставить и все круто становится, то здорово...

Изменено пользователем Dusker

Поделиться сообщением


Ссылка на сообщение
24 минуты назад, Dusker сказал:

В юнити нельзя, только если не пытаться переписать сам юнитивский движок.

Это не движок, это обычные стандартные ивенты, то есть события, возникающие при определённом воздействии на элемент гуя. ты спокойно можешь создавать новые ивенты или редактировать уже существующие. Это стандартная и неотъемлемая составляющая самой сишки.

Как минимум, повторюсь, это легко доступно в визуал студио, а визуал студио используется или может быть использовано в юнити для создания гуя и кода. Могу найти видео, где показано как это делается в визуалке. Вот первое попавшееся тематическое видео, которое я определённо выбрал не из-за красивых глаз (да глаз) у ютуберши. Вот первое попавшееся видео о ивентах гуя в юнити “как есть”.

Вот гайд по ивентам гуя “фокус” юнити.

Изменено пользователем Tirniel

Поделиться сообщением


Ссылка на сообщение
3 часа назад, Dusker сказал:

Там скоро зима кончится? Я же устала по сугробам бегать.

Летом в шубе и валенках бегать будешь?

Поделиться сообщением


Ссылка на сообщение
50 минут назад, Tirniel сказал:

это обычные стандартные ивенты

Я понимаю, что такое ивенты. Я как раз писал код, который возвращал фокус на кнопки. Сначала он выглядел вот так:

2b12173c7f6cabdf04a561e4cf97554b.png

Но это выглядел как пистец, и я использовал кортеж ключей в словаре, чтобы сократить код.

f40155a2c961c353526879d2ba7382a0.png

Но тем не менее. В юнити нету возможности, ни в инспекторе, не в настройках проекта, ни написав свой скрипт запретить, покидать фокус с кнопки если мышка ткнула в пустое место. Только вернуть с помощью скрипта. Так устроен юнитивский движок. Чтобы запретить, нужно переписать модуль вводя. Но я хз почему, но у меня не получается через  protected override переписывать юнитивские фичи. Даже если получится, оно скорее всего сломает onDeselect. 

Я кстати не понял, зачем ты мне скинул видосики для новичков, но ладно, спасибо)

 

21 минуту назад, \miroslav\ сказал:

Летом в шубе и валенках бегать будешь?

Не. Я даже зимой в куртке не хожу. Футболка и худи. Куртку одеваю ток если иду с кем то на встречу. Чтобы человеку не было не комфортно, от странных взглядов людей. И то она просто для вида, фактически очень легкая и тепла не дает.

Изменено пользователем Dusker

Поделиться сообщением


Ссылка на сообщение
16 минут назад, Dusker сказал:

Футболка и худи.

так по этому у меня подозрения и были, думал ты как нехочуха все на оборот делаешь.)

Изменено пользователем \miroslav\

Поделиться сообщением


Ссылка на сообщение
1 минуту назад, \miroslav\ сказал:

так по этому у меня подозрения и были, думал ты как нехочуха все на оборот делаешь.)

Нет. Летом я хожу в футболке. Первый перехожу на летний формат одежды и последний с него ухожу.

Поделиться сообщением


Ссылка на сообщение
1 час назад, Dusker сказал:

Я как раз писал код, который возвращал фокус на кнопки.

В твоём коде ты не вызываешь нужные стоковые ивенты ui. Ты совсем не то делаешь (ивент систем скриптов и ивенты уи — это разные вещи, если что). Ведь даже мануал по юнити скинул тематический по фокусу (даже тыкну в нужное, тебе нужен “ FocusOutEvent “). Там есть примеры.

Также повторюсь, если ты вот прям уверен, что во всём виноват юнити (пусть это и не так) — делай код через интегрированный в юнити визуал студио. Там это совершенно точно доступно.

И да, скорее всего тебе нужно использовать кастомное выделение объекта при фокусе вместо стокового, то есть задав его явно. Тогда проблем со ивентом снятия фокуса (где и задать нул изменений в объекте, что скорее всего и вообще не понадобится) быть не должно.

В общем, не удивляйся, почему я твой код читать обычно не желаю. Тебя обучать проблематично, т.к. ты не знаешь основ, потому лично мне не хочется тратить время на разжёвывание примитивов. А писать за тебя сразу готовый код — не дождёшься, не стану даже для примера. В целом, у меня частенько возникает ассоциация с забиванием гвоздей микроскопом: да, это работает, но ведь есть же молоток, а микроскоп всё-таки несколько для иного предназначен.

Изменено пользователем Tirniel

Поделиться сообщением


Ссылка на сообщение
47 минут назад, Tirniel сказал:

Ты совсем не то делаешь

А что я там делаю?)

47 минут назад, Tirniel сказал:

даже тыкну в нужное, тебе нужен “ FocusOutEvent

Ты тыкнул, в описание поведения обьекта когда он потерял фокус. Типо “Сделай что-то, когда обьект уже потерял фокус”. А задача не дать ему его потерять. Не вернуть обратно. А не дать потерять.

Обьясняю по простому, что происходит когда мышка делает клик на экране. Она “рейкастит” луч на поверхность экрана, проверяя что под ней, если обьект имеет (если про юнити говорить) компонент selectable(может быть активным, иметь фокус), то она говорит ивентовой системе, что выбран обьект  в который она попала и передает его в эту ивентовую систему, и вызывает на нем события onSelect() типо обьект выбран, сделай все что надо с ним когда он выбран, подсвети его там, цвет измени и прочую херню которую задал пользователь-программист. А если луч под мышкой попал во что-то у чего нет selectable, это значит что он не может быть выбран, и ивентовая система получает вместо обьекта...null. Но раньше там был записан предыдущий обьект в который мыш попала, а после там стало...ничего. Данные изменились в ней. И ивентовая система запускает onDeselect на том обьекте, который был до этого. Типо сделай что-то, когда обьект потерял фокус. Ты мне кидаешь как раз вот это “сделай что-то с обьектом, когда он УЖЕ потерял фокус.” Ты мне на видосах показываешь вот это нубское как пользоваться существующими правилами ивентой системы, а не как эти правила изменить. ЭТО РАЗНЫЙ УРОВЕНЬ.

Изменено пользователем Dusker

Поделиться сообщением


Ссылка на сообщение
12 минут назад, Dusker сказал:

Типо “Сделай что-то, когда обьект уже потерял фокус”. А задача не дать ему его потерять. Не вернуть обратно. А не дать потерять.

Ты мыслишь неверно. Тебе надо, чтобы при снятии фокуса (а снятие фокуса — это когда мышь уходит с объекта, то есть это событие неизбежно) в общем, чтобы при снятии фокуса не терялось выделение с объекта. Тебе не нужно лочить фокус, тебе нужно, чтобы объект имел визуальный эффект выделения, а это проперти объекта отдельное, такое же, как и прочие, которое можно задать явно.

В т.ч. ты можешь пойти от обратного и задать критерии, при которых и только при которых появляется выделение объекта, задав, например, не так, чтобы требовался постоянный фокус (как у тебя сейчас), а выделение при появлении ивента фокуса и снятие выделения при смене фокуса на другой объект по ивенту фокуса. Как это, собственно, обычно и делают.

Скажу больше, ты можешь зайти и дальше, сделав объект для каждого состояния: выделенный и не выделенный и чередовать их по ивентам смены фокуса с одного объекта на другой (и только при этом ивенте). Либо через состояния, либо через шейдеры — в общем, без использования стоковых стандартных средств. Но это ты уже и так должен знать.

В общем, всё-таки изучи лучше уж основы, а то ты совершенно не понимаешь, о чём тебе говорят. Ты буквально забиваешь гвозди микроскопом, не понимая, что это можно сделать в сотни раз проще.

Изменено пользователем Tirniel

Поделиться сообщением


Ссылка на сообщение
33 минуты назад, Tirniel сказал:

Ты мыслишь неверно. Тебе надо, чтобы при снятии фокуса (а снятие фокуса — это когда мышь уходит с объекта, то есть это событие неизбежно) в общем, чтобы при снятии фокуса не терялось выделение с объекта. Тебе не нужно лочить фокус, тебе нужно, чтобы объект имел визуальный эффект выделения, а это проперти объекта отдельное, такое же, как и прочие, которое можно задать явно.

В общем, всё-таки изучи лучше уж основы, а то ты совершенно не понимаешь, о чём тебе говорят.

Я не понимаю о чем говорят? Я как бы задал тему и что мне в ней надо. А ты почему то за меня решил что мне надо и говоришь, что Я не понимаю о чем мне говорят )) 

Допустим, вот есть три варианта ответа в диалоге. Между ними можно переключаться как наводя мышкой, так и клавишами вверх и вниз, подтверждение кликом мышки либо клавишей Е. И допустим игрок кнопочками вверх вниз навелся на второй вариант. И текущий выбор ответа в фокусе, допустим выделен, зеленым цветом, а те кто не выделен белым, не суть. Если он дальше нажмет Е, то система засчитает что игрок решился с выбором ответа в диалоге и пойдет дальше диалог. А если  игрок вместо этого щелкает куда то мышкой не по выбору ответа в диалоге, а просто в пустое место. Система делает деселект. Диалог перестает быть в фокусе. Теряет зеленый цвет, фокус, и теперь если игрок нажмет Е, то ничего не произойдет. Потому что ничего не выбрано.  Если действовать как ты предложил, то визуальный эффект останется, но вот даже если игрок нажмет Е, то вариант ответа не будет считаться выбранным и диалог не пойдет. Потому что он не выбран. Только визуал остался,зеленый цвет остался, но он по факту не в фокусе. Так зачем ты тогда такую глупость предлагаешь? И еще про основы какие то говоришь?

Изменено пользователем Dusker

Поделиться сообщением


Ссылка на сообщение

@\miroslav\  обновил дрова до 26.2.1 ? в nioh 3 fps ~10 добавилось :)

 

Поделиться сообщением


Ссылка на сообщение
20 минут назад, vadik989 сказал:

обновил дрова до 26.2.1 ? в nioh 3 fps ~10 добавилось :)

хм сейчас замерю сколько у меня в нио, а потом обновлюсь. я пока все еще на25.12.1 погоди так 26.2.1 в релиз то еще не вышли? да и потом интересно не сколько там фпс добавилось конкретно тебе, а сколько это в процентах

Изменено пользователем \miroslav\

Поделиться сообщением


Ссылка на сообщение
45 минут назад, Dusker сказал:

Система делает деселект.

Нет, это уже твой косяк, ты не задал исключение на “он клик” ивент. Либо не задал явно условия выделения варианта выбора и все условия смены выделения выбора. Забавно то, что в первом же видел был мельком указан случай клика мимо (пусть и в другом контексте), если бы ты смотрел, то догадался бы, что это тоже ивент, то есть его можно учесть и использовать.

Ты задал вопрос про фокус, то есть выделение элемента при наведении мышой, я тебе его дал. То, что ты выражать мысль не умеешь — это уже твои проблемы.

Больше не спрашивай моих советов, тебе помогать — себя не жалеть.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас



×