Умножьте каждое значение массива на одно значение в Unreal Engine blueprint

#unreal-engine4 #unreal-blueprint

Вопрос:

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

Это так велико, занимает много места и немного уродливо. Я не могу найти функцию для умножения массива, она скрыта в другом классе, например, Vector, или имеет другое имя? Я не могу поверить, что это лучший способ сделать это.

Комментарии:

1. Я не думаю, что есть функция, которая делает это из коробки. Но в blueprint есть циклы, которые многое прояснят — вы даже можете добавить его в библиотеку функций blueprint, если вы, вероятно, будете использовать его повторно.

2. Спасибо за вашу помощь! Библиотека функций выглядела как решение, но, к сожалению, не похоже, что функции могут принимать массивы в качестве типа параметров. Даже ссылка на коллекцию не работает

3. Итак, если вы выберете нужный тип в параметре. Я думаю, что слева есть выпадающий значок или, может быть, чуть ниже? Затем вы можете выбрать сетку квадратов 3×3, которая является значком массива.

4. Ааа!! Я думал, что этот значок должен был удалить параметр, так как он выглядит как символ «минус»! Спасибо, друг, это сработало, если ты хочешь написать короткий ответ, я приму его как решение, чтобы другие люди могли увидеть, что есть обходной путь?

Ответ №1:

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

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

Приведенная ниже функция принимает массив float именованных «Входных данных массива» и один float именованный «Множитель» в качестве входных данных. Затем он использует For Each цикл для перебора каждого float элемента массива и умножения его значения на предоставленный «Множитель». Исходный массив модифицируется с помощью Set Array Elem (Elem-сокращение от Element), где Target Array массив, подлежащий изменению, Index является индексом массива изменяемого элемента и Item новым значением для установки. В этом случае возврат на самом деле не нужен, но если вы хотите что-то сделать после завершения цикла, вы можете подключить его к Completed контакту.

Функция, которая умножает значения массива

Чтобы проверить, работает ли это, вы можете просмотреть значения массива до и после использования функции, как показано ниже.

Результаты функции печати

В качестве альтернативы вы можете оставить исходный массив нетронутым и заставить свою функцию возвращать новый массив, как показано ниже. Вы могли бы просто использовать Add функцию для добавления каждого элемента в свой новый массив, но в этом примере я изменил размер массива до длины «Ввода массива», а затем использовал Set Array Elem , как и раньше. Причина этого в том, что это повысит производительность, особенно при использовании больших массивов. Add Функция должна будет изменять размер массива каждый раз, когда вы добавляете элемент, но приведенный ниже метод изменяет размер массива только один раз.

Функция, которая умножает значения массива и возвращает новый массив

OutputArray Переменная является локальной переменной, как вы можете видеть слева. Это означает, что переменная доступна только внутри текущей функции и недоступна на главном графике схемы. Вместо этого вы можете видеть, что возвращаемый узел теперь используется для возврата нового массива после завершения цикла. Это можно использовать, как следует из вашего графика основных событий.

Использование функции

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

Комментарии:

1. Ух ты! Спасибо за этот супер продуманный ответ! Я уже выполнил эту функцию, но с вашей проницательностью я построю ее таким более эффективным способом, надеюсь, это поможет другим людям!