Скорость итерации намного больше при редактировании прямо в Unity, чем при экспорте из блендера. Разумеется, что персонажей лепить лучше в специализированном редакторе, но для создания уровней круче ProBuilder ничего нет.
Забавно, не ожидал когда-либо увидеть статью в защиту Unreal против Unity. В целом согласен, начиная с определённого масштаба игры и квалификации разработчика разница в простоте использования движков становится несущественной и на первый план выходят более продвинутые фичи. Если взять те же LOD'ы, то в юнити до сих пор реализация весьма убогая, только недавно начались какие-то подвижки в эту сторону.
FPS ограничивается максимальной частотой обновления дисплея. Видеокарта может хоть миллион кадров в секунду обрабатывать, но если экран не может этот миллион показать, то реальный фпс будет всё равно равен частоте обновления экрана.
Приятно видеть, что моя статья кому-то помогла. думаю, вам может быть интересно посмотреть на мой тулкит, там генератор переписан с нуля и более аккуратный и стабильный.
Небольшое замечание по поводу генерации мешей. Если вы создаёте большие меши или делаете это часто, то лучше использовать методы Mesh.SetVertices, Mesh.SetTriangles и подобные, они загаживают меньше памяти.
Надо бы проверить профайлером, но, если мне не изменяет память, разрабы юнити говорили, что кешируется не всё, и в циклах и апдейтах GetComponent всё равно работает медленнее.
Проблему небольших отличий лучше решать наследованием, интерфейсами и прочим, ну да ладно.
А много у вас классов? Есть подозрение, что на большом количестве классов и переменных редактор будет подтормаживать при переключении между объектами: сначала будет залипать в OnEnable, а потом в OnInspectorGUI.
Я бы лучше сделал либо компонент-пустышку, который себя будет заменять на нужный, либо свою менюшку с попапом для добавления компонента. Сомневаюсь, что вам часто придётся менять тип компонента, когда он уже висит на объекте.
Не используйте так eulerAngles, юнити все повороты хранит в кватернионах, когда вы вызываете eulerAngles на самом деле происходит следующее:
public Vector3 eulerAngles
{
get
{
return this.rotation.eulerAngles;
}
set
{
this.rotation = Quaternion.Euler(value);
}
}
То есть в вашем примере вы сначала конвертируете кватернион в вектор, а потом обратно. На большом количестве объектов у вас будет падение производительности и лишний мусор в памяти — не очень хорошая вещь для пула.
Запускать корутины по строке — плохая практика, если вы переименуете метод, то у вас где-то в другом месте что-то сломается, и вы об этом не скоро узнаете. И лучше спрятать корутину внутри класса DisableObject, а наружу отдать метод, который её сам запускает, тогда контроль над корутиной останется у класса.
Угловая скорость есть, тензор инерции тоже есть. Что такое тензор инерции и зачем нужно его вращение я не знаю, никогда не сталкивался, так что тут я вам не помощник. А зачем вам понадобилась энергия вращения?
Прошу прощения за долгий ответ. Да, коллайдер в родителе, вращаемая модель внутри. Перемещение и приложение сил отдельно, визуализация вращения отдельно.
Небольшое замечание по поводу генерации мешей. Если вы создаёте большие меши или делаете это часто, то лучше использовать методы Mesh.SetVertices, Mesh.SetTriangles и подобные, они загаживают меньше памяти.
А много у вас классов? Есть подозрение, что на большом количестве классов и переменных редактор будет подтормаживать при переключении между объектами: сначала будет залипать в OnEnable, а потом в OnInspectorGUI.
Я бы лучше сделал либо компонент-пустышку, который себя будет заменять на нужный, либо свою менюшку с попапом для добавления компонента. Сомневаюсь, что вам часто придётся менять тип компонента, когда он уже висит на объекте.
Не используйте так eulerAngles, юнити все повороты хранит в кватернионах, когда вы вызываете eulerAngles на самом деле происходит следующее:
То есть в вашем примере вы сначала конвертируете кватернион в вектор, а потом обратно. На большом количестве объектов у вас будет падение производительности и лишний мусор в памяти — не очень хорошая вещь для пула.
Запускать корутины по строке — плохая практика, если вы переименуете метод, то у вас где-то в другом месте что-то сломается, и вы об этом не скоро узнаете. И лучше спрятать корутину внутри класса DisableObject, а наружу отдать метод, который её сам запускает, тогда контроль над корутиной останется у класса.
А зачем вы добавляете единицу?
Угловая скорость есть, тензор инерции тоже есть. Что такое тензор инерции и зачем нужно его вращение я не знаю, никогда не сталкивался, так что тут я вам не помощник. А зачем вам понадобилась энергия вращения?