Полезное

Мы Вконтакте

Discord канал

#
Пред.
12
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 18
Добрый день!
Прошу совета опытных товарищей.
подписку на UE4 приобрел неделю назад. Сейчас, соответственно, активно изучаю. Поставил себе целью сделать "Сапера" (игру времен Windows98). В принципе, сделал практически все: формируется поле из клеток (клетки - это блупринты двух типов: "пустые" и "бомбы"). Для пустых клеток подсчитывается количество клеток с бомбам по соседству, по клику мышки эта информация отображается на клетке. При клике по клетке с бомбой игра заканчивается.
Изображение Изображение
И все хорошо, но вот при окончательной доработке игры уперся в проблему, которую не могу решить. Необходимо реализовать возможность установки флага на клетку, где, по предположению игрока, находится бомба. По идее, это должно происходить при клике правой кнопкой мыши по клетке. Со всеми действиями, которые последуют дальше (деактивация "бомбы", отключение левого клика для нее, и т.п.) - проблем нет. Вопрос именно с иницацией события. Не знаю, как сделать событие по правому клику. В составе Event'ов в Блупринте присутствует событие "Event>Actor On Clicked" - но оно актуально только для стандартного клика ЛКМ. Для клика ПКМ нашел только это: Input>Mouse Events>Right Mouse Button, но вся беда в том, что этот инпут срабатывает только если его размещать в блупринте уровня (Level Blueprint). В эктор-блупринтах он не работает :( Интуитивно я понимаю, что [Event>...On Clicked] и [Input>Right MB] - это разные вещи и, в принципе, логично, что Input'ы не должны работать для отдельных Actor'ов, потому что в случае размещения массива объектов (и это как раз мой случай - поле 10х10=100 объектов, каждый из которых обрабатывает клик) при вводе (Input) события должны будут сработать сразу во всех. И вместе с тем я не понимаю, почему Эпики в свое детище не добавили возможности в событие "Actor On Clicked" добавить выбор нужной кнопки на мышке.

Подскажите, есть ли какой-то способ заставить срабатывать правый клик мыши в моем случае?
Последний раз редактировалось Elmikitos 17 фев 2015, 20:38, всего редактировалось 1 раз.
Аватара пользователя
Администратор
Сообщения: 1581
Вам нужно включить рекцию на инпутав в Actor BP. Делается это с помощью Enable Input блока. Только не забудьте присоединить в него Player Controller'а.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.
Аватара пользователя
Пользователь
Сообщения: 58
В настройках объекта выставляем Auto Recieve Input на Player 0:
Изображение

Блюпринт актора:
Изображение

В настройках проекта, во вкладке Input добавляем бинд:
Изображение

UPD: Чтобы не выставлять Auto Recieve Input в каждом объекте на сцене, можно выставить его в Defaults вашего блюпринта.
Изображение
Изображение
Последний раз редактировалось spacecreatorr 14 фев 2015, 17:59, всего редактировалось 1 раз.
Аватара пользователя
Администратор
Сообщения: 1581
spacecreatorr Да, так даже лучше будет. Только бинд в инпутах не обязателен, в принципе.. Они на случай, если управление можно будет менять.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.
Аватара пользователя
Пользователь
Сообщения: 58
Да, извиняюсь, бинды это уже лишнее. Можно использовать просто Right Mouse Button event.
Аватара пользователя
Пользователь
Сообщения: 18
Flakky, spacecreatorr, благодарю за помощь!
Вроде бы заработало, но не совсем :) Почему-то срабатывает только на той ячейке-бомбе, которая была сгенерирована последней.
Вот блупринт ячейки с бомбой:
Изображение

Auto Recieve Input на Player 0, как и советовали, выставил в дефолте блупринта. В объектах не выставлял, потому что изначально на сцене никаких объектов нет. Поле из ячеек генерируется при старте игры.

Провел эксперимент. Выставил настройки так, что все поле при генерации состоит из бомб. Соответственно, каждая из них при правом клике должна показать флаг (ну, символ # в моем примере). А при левом клике - исчезнуть. Так вот, левый клик для всех работает исправно, а правый срабатывает только на последней ячейке. Только на ней появляется флаг. Все остальные - не реагируют. Но! Если при этом кликнуть по этой ячейке (на которой правый клик срабатывает) левым кликом и тем самым уничтожить ее, то чудесным образом правый клик начинает срабатывать на соседней клетке. Той, которая была сгенерирована предпоследней, а теперь стала, получается, последней. При этом остальные так же продолжают не реагировать на правый клик. Ну и, соответственно, если удалить последнюю и предпоследнюю ячейки, то правый клик начинает срабатывать на пред-предпоследней. И так далее. Т.е. последняя сгенерированная ячейка умудряется при своем уничтожении передать соседке сработку ПКМ. Подскажите, почему оно работает так странно?
Аватара пользователя
Пользователь
Сообщения: 58
Elmikitos, можно увидеть код генерации поля?
Аватара пользователя
Пользователь
Сообщения: 18
spacecreatorr писал(а):
Elmikitos, можно увидеть код генерации поля?

Да. Вот он:
Изображение

Двумя циклами задаются координаты по двум осям, по которым спавнятся ячейки (из эктор-блупринтов). Ячейки двух видов - "пустые" и "бомбы".
Сама ячейка состоит из простенького меша, бокс-компонента (с помощью которого определяется соседство с другими ячейками) и текста на поверхности, который отображает циферку с кол-вом бомб по соседству (для пустой ячейки) или "флагом (#)" (для ячейки с бомбой).
Аватара пользователя
Пользователь
Сообщения: 18
Проблема сработки только в одной ячейке, как выяснилось, не связана с генерацией поля или некорректно созданным блупринтом. Третий день бьюсь, решения не нашел.
Оформил отдельной темой: viewtopic.php?f=3&t=853
Аватара пользователя
Администратор
Сообщения: 1581
А зачем вообще нажатие делать в самих ячейках? Их нужно делать, например, в Pawn'е. Просто в Pawn'e проверях на чем курсор и отправляй в ячейку соответствующее событие.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.


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

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница