Для экспорта из 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, потому что они оценивают двигатель достаточно, чтобы терпеть эти недостатки.
В целом, любая функция, которая не проверяет границы в аргументы. Список был бы
, необходимо использовать ограниченные версии размера как stncpy, strncat, fgets, и т.д. Затем быть осторожными при предоставлении предела размера; учтите '\0' завершений строки.
кроме того, массивы НЕ связываются зарегистрированные C или C++. Следующий пример вызвал бы ошибки. См. прочь одной ошибкой
int foo[3];
foo[3] = WALKED_OFF_END_OF_ARRAY;
редактирование : Скопированные ответы @MrValdez, @Denton Дворянство
Valgrind является Вашим новым лучшим другом.
valgrind - tool=memcheck - leak-check=full./a.out
Вопрос запускается в неправильном конце, я боюсь. Это предполагает, что переполнение буфера происходит в других функциях. Наиболее распространенной причиной является оператор ++, по моему опыту, или альтернативно отсутствие оператора! =.
лучшим решением найти пакет тех является / GS в Visual Studio 2005/8. Это не найдет всех их, но это - дешевый способ уменьшить количество необходимого физического труда.
Вот некоторые функции, что я нашел, что опасны:
К сожалению, любой массив может привести к переполнению буфера:
uint32_t foo[3];
foo[3] = WALKED_OFF_END_OF_ARRAY;
С точки зрения функций, sprintf счастливо уйдет от конца буфера. Это может быть заменено snprintf.
Memcpy () является другим опасный.
Любой цикл, получающий доступ к массиву, является опасной точкой, потому что нет никакого выхода за пределы остановки конца массива.
Утечки памяти вызываются, выделяя память, и не освобождая ее. Конструктор и деструкторы должны быть другой сильной точкой обзора, последний, чтобы удостовериться, что любая выделенная память освобождена.
Какую версию Visual Studio Вы используете? В 2008 со всеми включенными предупреждениями, все функции Вы упоминаете (и больше) предупреждают Вас, что они удерживаются от использования.
, Возможно, Вы могли проверить, что все предупреждения включены и позволяют компилятору сделать тяжелую работу для Вас?
Как примечание стороны, превосходное безопасный код записи делает отличную работу, объясняя различное ловушки некоторых более старых функций.
У меня есть несколько та же проблема на кодовой базе, я продолжаю работать. Мой совет: опасайтесь любых функций C, которые похожи на str* () и мадам* (). Также опасайтесь чего-либо, что берет указатель на буфер без длины. Так как кажется, что у Вас есть шанс использовать C++, я был бы в самых вопиющих случаях пытаться использовать контейнеры C++ для вещей: вектор, строка, карта, и т.д. Они делают Вашу жизнь намного легче.
кроме того, автоматизированные проблемные инструменты обнаружения замечательны иметь. Если бы можно использовать valgrind, я рекомендовал бы его. Также Рациональный Очищают, чрезвычайно мощно, хотя не дешевый.
Следующая ссылка должна дать Вам всесторонний взгляд на функции защиты в C++ (которые снабжаются постфиксом '_s' для решения проблем как переполнение): http://msdn.microsoft.com/en-us/library/8ef0s5kh (По сравнению с 80) РЕДАКТИРОВАНИЕМ .aspx
: Эта ссылка содержит определенные функции, которые были заменены: http://msdn.microsoft.com/en-us/library/wd3wzwts (По сравнению с 80) РЕДАКТИРОВАНИЕМ .aspx
: я должен упомянуть, что это методы Microsoft, но ссылка все еще полезна для идентификации функций, которые считали красным флагом.
В основном, что-либо, что принимает указатель и записи к нему, не проверяя длину. Так вещь как strcpy (), sprintf () и т.д.
Еще одна проблема в C - это функция strncpy (). Многие люди не понимают, что можно бесплатно возвращать строку, не оканчивающуюся нулем.