Рейтинг темы:
  • Голосов: 0 - Средняя оценка: 0. Если голосов меньше 5 оценка не показывается.
  • 1
  • 2
  • 3
  • 4
  • 5
Проблема с передачей данных между блупринтами в Unreal Engine 4
#1
Lightbulb 
Столкнулись с довольно неожиданной проблемой - не нашли внятного способа передачи значения переменной из одного блупринта в другой (другие).
Отчетливо понимаем, что в блупринтах все переменные - локальные, а для передачи нужна глобальная переменная (или "сквозная", как угодно).
В системе взаимодействия блупринтов между собой на уровне переменных разобраться не удалось, так как не нашли вразумительной информации - везде предлагается "костыль" наподобие "Cast" (конечно же, можно и пяткой ухо почесать при желании!). Способ передачи через файл - не интересует.
Вопрос: КАК КОНКРЕТНО реализовать передачу значения переменной из одного блупринта в другой?
Или: КАК КОНКРЕТНО реализовать доступность какой-либо произвольной переменной (или массива) любого типа одновременно для всех блупринтов (для всего уровня, для всей программы)?
ПРОСЬБА: Пожалуйста, не нужно никаких общих разглагольствований на тему общих приемов в программировании. Не нужно никаких предположений или догадок. Не нужно "там нужно на глазик нажать" (это не тот случай).
Нужен конкретный ответ.

P.S. Гнать игру в С++ не хотим - нас интересует именно реализация в блупринтах. У нас многолетний опыт работы программирования в С++, но с блупринтами (точнее с ООП) столкнулись впервые.

Заранее благодарны, N&A.

 
Ответить
#2
(14.04.2019, 15:57)8571255b писал(а): Столкнулись с довольно неожиданной проблемой - не нашли внятного способа передачи значения переменной из одного блупринта в другой (другие).
Отчетливо понимаем, что в блупринтах все переменные - локальные, а для передачи нужна глобальная переменная (или "сквозная", как угодно).
В системе взаимодействия блупринтов между собой на уровне переменных разобраться не удалось, так как не нашли вразумительной информации - везде предлагается "костыль" наподобие "Cast" (конечно же, можно и пяткой ухо почесать при желании!). Способ передачи через файл - не интересует.
Вопрос: КАК КОНКРЕТНО реализовать передачу значения переменной из одного блупринта в другой?
Или: КАК КОНКРЕТНО реализовать доступность какой-либо произвольной переменной (или массива) любого типа одновременно для всех блупринтов (для всего уровня, для всей программы)?
ПРОСЬБА: Пожалуйста, не нужно никаких общих разглагольствований на тему общих приемов в программировании. Не нужно никаких предположений или догадок. Не нужно "там нужно на глазик нажать" (это не тот случай).
Нужен конкретный ответ.

P.S. Гнать игру в С++ не хотим - нас интересует именно реализация в блупринтах. У нас многолетний опыт работы программирования в С++, но с блупринтами (точнее с ООП) столкнулись впервые.

Заранее благодарны, N&A.

https://docs.unrealengine.com/en-us/Engine/Blueprints/UserGuide/BlueprintComms  должно помочь
взаимодействие между объектами -блю принтами происходит попарно Активный объект (working)влияет на пассивный(target) в выделенном объекте надо определить публичную переменную как там написано.Делаем переменную редактируемой,потом выбераем ее панели дефолт. если все правильно должно сработать если нет движ покажет в каком блюпринте проблема.

 
1
Ответить
#3
(15.04.2019, 07:26)e6bbdc29 писал(а): https://docs.unrealengine.com/en-us/Engine/Blueprints/UserGuide/BlueprintComms  должно помочь
взаимодействие между объектами -блю принтами происходит попарно Активный объект (working)влияет на пассивный(target) в выделенном объекте надо определить публичную переменную как там написано.Делаем переменную редактируемой,потом выбераем ее панели дефолт. если все правильно должно сработать если нет движ покажет в каком блюпринте проблема.

Оно, конечно же, так...
Но всё дело в том, что описанным способом из другого блупринта можно извлечь только то значение переменной, которое присвоено её как default. Да, конечно, это получается действительно - глобальная переменная, но использовать её в реальной жизни нельзя (это фактически - константа). Многочисленные разнообразные (переприсвоение, сложение с другой переменной или константой) попытки изменения значения переменной  ни к чему не привели - считывается именно значение, присвоенное как default.
Возможно я невразумительно объяснила суть проблемы. Есть переменная integer, значение которой изменяется в ходе игры произвольным (неважно каким) образом. Нужна возможность применения текущего значения этой переменной из любого блупринта и нужна возможность изменения текущего значения этой переменной из любого блупринта.
"Таскать" с собой весь блупринт из-за одного значения одной переменной - не есть изящное решение. Неизящные решения не работают корректно (как показывает опыт), сильно загрязняют код и делают программу избыточно громоздкой.

С уважением и благодарностью, Nika & Ana.

P.S. "public"- это речь идет о всей функции, а не о переменной. У определяемой функции её переменные остаются локальными.

 
Ответить
#4
https://forums.unrealengine.com/development-discussion/blueprint-visual-scripting/100621-transferring-variables-between-blueprints
https://answers.unrealengine.com/questions/238654/passing-variables-between-blueprints.html

Гуглится на раз, странно что данный вопрос до сих пор актуален.

 
Ответить
#5
@188fb8f5, я искренне благодарю Вас за помощь в переводе фразы "передача переменной" с Русского на Английский.
К сожалению, другой полезной информации в Вашем посте не обнаружено - всё, что Вы привели в ссылках уже обсуждено и нерезультативно.
Благодарю за уделённое внимание.

P.S. в следующий раз, пожалуйста, не торопитесь демонстрировать высокомерный сарказм.

 
Ответить
#6
@35606ee4, а других решений на блу принтах и нет, вам в любом нужна ссылка на объект (блу принт) к переменной которой нужен доступ, и нужен также каст к типу объекта этого блу принта.
Цитата:везде предлагается "костыль" наподобие "Cast"
А что вы хотели? Блу принты это не отдельный скриптовый движок, они в любом случае транслируются при сборке с++ код со всеми вытекающими, поэтому и необходимы низкоуровневые "костыли".

 
Ответить
#7
(19.04.2019, 05:34)7c78cee3 писал(а): @35606ee4, а других решений на блу принтах и нет, вам в любом нужна ссылка на объект (блу принт) к переменной которой нужен доступ, и нужен также каст к типу объекта этого блу принта.
Цитата:везде предлагается "костыль" наподобие "Cast"
А что вы хотели? Блу принты это не отдельный скриптовый движок, они в любом случае транслируются при сборке с++ код со всеми вытекающими, поэтому и необходимы низкоуровневые "костыли".
Очень трудно менять привычки после С++...
Тот самый случай, когда тебе нужен молоток, а тебе предлагают несколько разнообразных красивых отвёрток.
"Трудно выбрать, что лучше - забитый молотком шуруп или закрученный отвёрткой гвоздь?" (Цитата умного человека)

 
Ответить
#8
Блу принты это альтернатива для тех кто не может в программирование и как средство быстрого вхождения. Если же вы знаете плюсы на уровне выше среднего, то писать сразу на плюсах будет быстрее. Блу принты имеет смысл использовать если над проектом будет работать еще кто-то без опыта. Кастануть к нужному типу не должно быть проблемой, ну или можете прикрутить любой скриптовый язык и писать всю игровую логику на нем если вам не нужна строгая типизация и нужна к примеру рефлексия из под коробки. Как пример https://wiki.unrealengine.com/Integrating_Lua
Но если с луа и его интеграцией не имели до этого дела, то лучше выбрать любой другой скриптовый язык с которым есть опыт.

 
Ответить
#9
(19.04.2019, 18:56)7c78cee3 писал(а): Блу принты это альтернатива для тех кто не может в программирование и как средство быстрого вхождения. Если же вы знаете плюсы на уровне выше среднего, то писать сразу на плюсах будет быстрее. Блу принты имеет смысл использовать если над проектом будет работать еще кто-то без опыта. Кастануть к нужному типу не должно быть проблемой, ну или можете прикрутить любой скриптовый язык и писать всю игровую логику на нем если вам не нужна строгая типизация и нужна к примеру рефлексия из под коробки. Как пример https://wiki.unrealengine.com/Integrating_Lua
Но если с луа и его интеграцией не имели до этого дела, то лучше выбрать любой другой скриптовый язык с которым есть опыт.
Нас двое.
У каждой - свой опыт в программировании. Пересечения в нужном направлении - практически отсутствуют.
Будут блупринты.
Спасибо за попытку помочь smile

 
Ответить
#10
Сделать дочерним. Он унаследует всё от мамы.
[Изображение: https://i.postimg.cc/sDnGRmSZ/123.jpg]

Подключить интерфейс.
[Изображение: https://i.postimg.cc/FRZsVFVJ/23123.jpg]

А лучше напишите в вк группу, там помогут.
https://vk.com/unreal_engine_4

 
Ответить
#11
(19.04.2019, 23:53)32e20d21 писал(а): Сделать дочерним. Он унаследует всё от мамы.
***
Подключить интерфейс.
***
А лучше напишите в вк группу, там помогут.
https://vk.com/unreal_engine_4

Благодарю Вас! smile С родительской структурой наследования разобрались ранее, но (кажется, не достоверно) она не затрагивает переменные, хоть и наследует многое-многое другое.


Нашли вот такой способ (см. ссылку ниже).
https://answers.unrealengine.com/questions/548875/pass-variable-between.main-menu-and-levels.html
Конечно же, способ далёк от элегантности, но, тем не менее, очень надежен. Напоминает лом - не эстетично, но очень действенно.
Способ уже проверен на нашей игре в виде упрощенной версии - выбросили SEQUENCE (с единственной переменной он не нужен) и PRINTSTRING. Получилось очень компактно. При желании - можно всё это собрать в функцию.
Рекомендуем smile smile smile
Искренняя благодарность всем тем, кто отозвался на просьбу о помощи - очень приятно обнаружить множество неравнодушных людей вокруг.
СПАСИБО ОГРОМНОЕ!!!

 
Ответить
#12
@35606ee4, как вариант также можно использовать событийную модель:
https://docs.unrealengine.com/en-us/Engine/Blueprints/UserGuide/EventDispatcher
https://answers.unrealengine.com/questions/797858/using-event-dispatchers-to-communicate-variable-be.html

 
Ответить
#13
(20.04.2019, 14:48)7c78cee3 писал(а): @35606ee4, как вариант также можно использовать событийную модель:
https://docs.unrealengine.com/en-us/Engine/Blueprints/UserGuide/EventDispatcher
https://answers.unrealengine.com/questions/797858/using-event-dispatchers-to-communicate-variable-be.html

@188fb8f5,
Ого! Спасибо!
В будущем это очень сильно пригодится. Уже даже знаю - в каком конкретно месте игры!

 
Ответить


Переход:


Просматривают эту тему: 1 Гость(ей)