Ваш цикл for
возвращает сообщение Unit
, следовательно, сообщение об ошибке. Вы можете использовать for-yield
для возврата значений, но поскольку Seq
должен быть updated
последовательно, простой foldLeft
будет работать лучше:
import org.apache.spark.sql.functions._
val df = Seq(
(Seq(101L, 102L), Seq("1", "2"), Seq(11, 12)),
(Seq(201L, 202L, 203L), Seq("2", "3"), Seq(21, 22, 23))
).toDF("C1", "C2", "C3")
// +---------------+------+------------+
// |C1 |C2 |C3 |
// +---------------+------+------------+
// |[101, 102] |[1, 2]|[11, 12] |
// |[201, 202, 203]|[2, 3]|[21, 22, 23]|
// +---------------+------+------------+
def updateC3 = udf( (c1: Seq[Long], c2: Seq[String], c3: Seq[Int]) =>
c2.foldLeft( c3 ){ (acc, i) =>
val idx = i.toInt - 1
acc.updated(idx, c1(idx).toInt)
}
)
df.withColumn("C3", updateC3($"C1", $"C2", $"C3")).show(false)
// +---------------+------+--------------+
// |C1 |C2 |C3 |
// +---------------+------+--------------+
// |[101, 102] |[1, 2]|[101, 102] |
// |[201, 202, 203]|[2, 3]|[21, 202, 203]|
// +---------------+------+--------------+
Unity поддерживает файлы .FBX, .dae (Collada), .3DS, .dxf и .obj. Если ваш Autocad может экспортировать любой из них, тогда ответ будет да. Это возможно, но прочитано ниже.
Объекты, созданные в Autocad, SolidWorks или другом подобном программном обеспечении, не должны быть импортированы в Unity напрямую любыми способами. Это слишком тяжело для Единства. Если вы хотите использовать свои модели из любого из этих программ, экспортируйте их в программное обеспечение, такое как Maya или Blender, затем очистите модели. Уменьшите количество полисов перед импортом в Unity.
Обратите внимание, что для очистки моделей потребуется время. Вы должны потратить это время на создание новых моделей в Maya или Blender. Если ваша цель состоит в том, чтобы сделать игру, вам необходимо изучить майю или блендер. Для этого не используется Autocad. Поскольку вы уже используете Autocad, я предлагаю вам использовать Maya, так как пользовательские интерфейсы теперь сделаны похожими.
EDIT:
Я вижу ответ ниже, предлагающий полностью использовать модели Autocad в Unity или моделировать объекты в Autocad. Речь идет не только о создании моделей. Вы должны сделать некоторые работы над моделями, чтобы они выглядели хорошо и даже правильно работали с движком рендеринга Unity. Вот несколько причин не использовать Autocad для моделирования ваших игровых объектов:
Вы должны развернуть UV модели перед импортируя модель в игровой движок. Без этого трудно сделать текстурирование, и вы столкнетесь с проблемами.
Опять же, это делается внутри программ, таких как Maya и Blender not Autocad.
Вам нужно испечь карты в большинстве случаев при работе с подробными подробными моделями. При создании материалов из V-ray или любого рендерера в Maya со сложными материалами вам нужно испечь окончательный результат в виде типов карт, таких как цвет, нормальный, альфа .... Это также относится к светлой выпечке.
Сначала вы моделируете high poly, а затем переносите карту на low poly. Вы не можете сделать это с помощью Autocad. Это очень важно, так как это уменьшает количество полисов в вашей игре.
Все упомянутое выше очень важно, когда дело доходит до разработки игр, но Autocad не предназначен для их обработки.
Используйте правильный инструмент для задания. Используйте Autocad для engineering и Maya или Blender для игр , фильмов и art . Это так просто.
Для экспорта из AutoCad используйте формат OBJ или FBX. Страница Unity, «какие файлы можно импортировать», вводит в заблуждение, потому что экспортируемые форматы файлов различаются с каждым новым годом, а новые версии экспортирующих программ часто не совместимы с Unity. К сожалению, разработчикам Unity требуется несколько лет, чтобы ускорить процесс импорта.
Что касается оптимизации ваших моделей, «очистка их» в Maya - это шутка, потому что Maya также будет экспортировать «тяжелые», в зависимости от формата, который вы используете. Существует приоритет для очистки модели, но продукты AutoCad являются лучшими в отрасли, и если вы очищаете их в CAD-программе, а затем экспортируете в OBJ или FBX, все должно быть хорошо. Maya также является продуктом AutoCad, я просто говорю, что вам не нужно жонглировать файлом в разных программах. Если вы используете формат экспорта OBJ или FBX, и если ваш файл в основном является моделью CG, то он будет работать нормально, как обычно, из CAD-программы в Unity. В программах CAD есть утилиты для очистки моделей, а также такие программы, как Sketchup, DAZ3D и другие. Вам не нужно триангулировать лица, и обычно OBJ будет работать отлично.
. Ваш лучший вариант для импорта в Unity - использовать OBJ, если возможно, из любой исходной программы. Большинство моделей поддержат это, если у вас нет анимации или «костей». Если вы экспортируете в OBJ и выбираете опцию NOT triangulate всех лиц, и DO включают текстуры, вы должны быть в порядке. Если ваша модель включает анимацию, тогда вы должны использовать формат FBX, который будет иметь значительно более высокую стоимость файла.
Кроме того, он лучше работает и перетаскивает .obj-файл, файл .mtl и текстуры папке в папке Unity Asset, где вы ее хотите (лучше, чем пытаться использовать функцию Unity для импортирующего актива).
Следует иметь в виду, что многие форматы, которые Unity заявляет для импорта на своих «каких файлах я могу import "недействительны в зависимости от версии программы экспорта. Например, файлы DXF должны быть более ранней, а не последней. Такие программы, как Sketchup и .skp, будут импортированы только в Unity, если вы используете более раннюю версию еще в 2013 году, как и Unity 5.6.0f3.
Обычно, если вы знаете об этих проблемах, и вы готовы попробовать несколько методов экспорта / импорта модели CG, вы найдете успех. Очевидно, игровые разработчики продолжают использовать Unity, потому что они оценивают двигатель достаточно, чтобы терпеть эти недостатки.