-
Автор темы
- #1
Урок от начинающего изучение UE4 для таких же начинающих.
Предыстория: здесь человек попросил помощи и описал что ему надо. Мне задача показалась интересной и вполне простой чтобы попробовать свои силы. Результат перед вами.
Задача:
На базе шаблона игры от третьего лица написать опросник/викторину. Персонаж подходит в определённую точку (пусть это будет стол с экзаменатором) и в этот момент начинается тестирование:
добавляем на него тригер и текстовую надпись. Когда наш персонаж подойдет к ней - начнется викторина
2. Создаем наш виджет с вопросом. Я выбрал самый просто вариант: вопрос и 3 кнопки для ответа (в моем примере правильный может быть только один). Дополнительно выводится номер вопроса и кнопка «Завершить»
В этом примере есть только один виджет и вопрос тоже один)). Конечно, у вас может быть много разных виджетов с разным количеством вариантов ответов. Или можно легко расширить этот (передавать в него вопрос и правильный индекс ответа).
Я назвал свой виджет WBP_Quiz, мне нужны только 4 кнопки (их я переименовал) и один текст для отображения порядкового номера вопроса - тоже переименовал и установил для него признак того, что эта переменная
Переходим в граф нашего виджета, видим наши кнопки и tvNum в списке переменных. Добавляем еще 3 переменные:
В Event Dispatcher добавляем 2 события:
После создания виджета выведем порядковый номер в текстовое поле и случайным образом установим значение для правильного варианта ответа (это только для этого примера):
Обработчики нажатия на 3 кнопки все одинаковые, только в первом случае ValidNum проверяется на равенство с 0, для второй кнопки с 1 и т.д:
Для кнопки “Завершить” все еще проще, вызаваем сразу событие:
Виджет готов, переходим в блюпринт уровня.
3. В блюпринте уровня у нас будет вся логика связанная с отображением/скрытием виджетов, подсчетов и выводом результатов. Добавляем переменные:
Также добавляем событие тригера onActionBeginOverlap, сработает когда персонаж зайдет в него и еще несколько кастомных евентов:
OnShowQuestion: выводим сообщение отладки, увеличиваем счетчик, создаем виджет (если ранее не создали и сохраняем на него ссылку), отображем виджет:
Далее биндимся к нашим 2-ум событиям виджета (просто перетащите их из виджета), включаем оторажение мыши и останавливаем персонажа:
onHideQuestion: если виджет был ранее создан - убираем его с экрана, скрываем мышь и восстанавливаем “подвижность” персонажа + дебажное сообщение
OnNextQuestion: Простой подсчет результатов: если получили от виджета true - увеличиваем счетчик правильных ответов, потом скрываем предыдущий виджет, немного ждем и открываем следующих вопрос (в мое примере это тот же виджет, у вас может быть другой)
onEndQuiz: Скрываем виджет с экрана и выводим результаты тестирования. В моем примере это просто сообщение в отладчике – у вас может быть виджет или что-то другое. Можно мелодию воспроизвести или салют запустить). И в конце очищается флаг «запущенности» викторины.
Обратите внимание на красные жгуты - это биндинг с событиями виджета.
На этом все, запускаем и проверяем. У меня
Предыстория: здесь человек попросил помощи и описал что ему надо. Мне задача показалась интересной и вполне простой чтобы попробовать свои силы. Результат перед вами.
Задача:
На базе шаблона игры от третьего лица написать опросник/викторину. Персонаж подходит в определённую точку (пусть это будет стол с экзаменатором) и в этот момент начинается тестирование:
- персонаж стоит и не двигается
- отображается виджет с вопросом и вариантами ответов
- мышкой выбираем вариант ответа (или кнопку завершить)
- отображаем на экране результат ответа (верно/не верно), виджет закрывается
- если НЕ «завершить» - подсчитываем общее количество правильных ответов и задаем следующий вопрос (отображается следующий виджет)
- если «завершить», то закрываем текущий виджет и выводим результаты тестирования (сколько ответил верно из общего количества вопросов)
- Создаем новый уровень Default, я назвал его QuizLevel:
добавляем на него тригер и текстовую надпись. Когда наш персонаж подойдет к ней - начнется викторина
2. Создаем наш виджет с вопросом. Я выбрал самый просто вариант: вопрос и 3 кнопки для ответа (в моем примере правильный может быть только один). Дополнительно выводится номер вопроса и кнопка «Завершить»
В этом примере есть только один виджет и вопрос тоже один)). Конечно, у вас может быть много разных виджетов с разным количеством вариантов ответов. Или можно легко расширить этот (передавать в него вопрос и правильный индекс ответа).
Я назвал свой виджет WBP_Quiz, мне нужны только 4 кнопки (их я переименовал) и один текст для отображения порядкового номера вопроса - тоже переименовал и установил для него признак того, что эта переменная
Переходим в граф нашего виджета, видим наши кнопки и tvNum в списке переменных. Добавляем еще 3 переменные:
- Num (integer) – порядковый номер вопроса, просто для информирования пользователя о прогрессе
- ValidNum (integer) – индекс правильного ответа от 0 до 2 (по кол-ву кнопок)
- Guested (Boolean) – признак того, что пользователь ответил правильно
В Event Dispatcher добавляем 2 события:
- NextQuestion – будем отправлять из виджета после ответа, если хотим следующий вопрос. Обратите внимание, что для этого события добавлен один булевый параметр – признак того, что пользователь ответил правильно. Пригодится для подсчета результатов.
- EndQuestions – отправляем когда хотим завершить тестирование
После создания виджета выведем порядковый номер в текстовое поле и случайным образом установим значение для правильного варианта ответа (это только для этого примера):
Обработчики нажатия на 3 кнопки все одинаковые, только в первом случае ValidNum проверяется на равенство с 0, для второй кнопки с 1 и т.д:
Для кнопки “Завершить” все еще проще, вызаваем сразу событие:
Виджет готов, переходим в блюпринт уровня.
3. В блюпринте уровня у нас будет вся логика связанная с отображением/скрытием виджетов, подсчетов и выводом результатов. Добавляем переменные:
- Widget (WBP_Quiz Object Reference) – ссылка на создаваемый виджет. У меня всего один тип виджета, поэтому и ссылка одна
- Num (integer) – порядковый номер вопроса, будем просто прибавлять 1 при каждом следующем вопросе
- ValidNums(integer) – количество правильных ответов
- QuizStarted(boolean) – признак того, что викторина запущена, просто для страховки чтобы не запускать второй раз если будет сработка триггера
Также добавляем событие тригера onActionBeginOverlap, сработает когда персонаж зайдет в него и еще несколько кастомных евентов:
- onShowQuestion – показываем виджет с вопросом
- onHideQuestion – скрываем ранее открытый виджет
- onEndQuiz – вывод результатов тестирования
- onNextQuestion – подсчёт правильных ответов и отображение следующего вопроса. Обратите внимание, что для этого события добавлен булеан входящий параметр. В него передается значение из соответствующего события (NextQuestion) виджета
OnShowQuestion: выводим сообщение отладки, увеличиваем счетчик, создаем виджет (если ранее не создали и сохраняем на него ссылку), отображем виджет:
Далее биндимся к нашим 2-ум событиям виджета (просто перетащите их из виджета), включаем оторажение мыши и останавливаем персонажа:
onHideQuestion: если виджет был ранее создан - убираем его с экрана, скрываем мышь и восстанавливаем “подвижность” персонажа + дебажное сообщение
OnNextQuestion: Простой подсчет результатов: если получили от виджета true - увеличиваем счетчик правильных ответов, потом скрываем предыдущий виджет, немного ждем и открываем следующих вопрос (в мое примере это тот же виджет, у вас может быть другой)
onEndQuiz: Скрываем виджет с экрана и выводим результаты тестирования. В моем примере это просто сообщение в отладчике – у вас может быть виджет или что-то другое. Можно мелодию воспроизвести или салют запустить). И в конце очищается флаг «запущенности» викторины.
Обратите внимание на красные жгуты - это биндинг с событиями виджета.
На этом все, запускаем и проверяем. У меня
Пожалуйста, авторизуйтесь для просмотра ссылки.
.