Как я вижу, основная проблема не в C ++ или Unity3D, а в том , нужно ли вам решение высокого уровня или решение низкого уровня .
Низкоуровневое решение - это решение, которое вы запачкаете процессами ввода, управления памятью или загрузки моделей. Высокоуровневое решение - один аккуратный пакет, например Unity3D.
Для меня, использовать ли Unity3D (или любой другой игровой движок) или C ++, зависит от целей вашей игры и проекта.
Используйте Unity3D, если время разработки должно быть быстрым и / или ваша игра не требует высокой производительности или не имеет высокого уровня графической / вычислительной производительности. Если вы хотите сконцентрироваться на игровом процессе, и стандартные инструменты, которые предоставляет Unity3D, в порядке, вы можете рассмотреть возможность использования Unity3D.
C ++ с другими библиотеками. Если у вас больше времени на разработку, игра требует больших вычислительных / графических возможностей или использует какую-то технологию, которую Unity3D не может внедрить.
Хорошая вещь о Unity3D состоит в том, что он все еще использует языки сценариев, которые отражают развитие реального мира (C # или JavaScript). Изученные вами концепции ООП и разработки программного обеспечения (синглтоны, фасад, конечные автоматы, декораторы, композиция) можно применять в Unity3D. Это помогает позаботиться о таких процессах обрезки печенья, как управление ресурсами, граф сцены, загрузка моделей, рендеринг, сохранение сцен и т. Д. Еще лучше, если вам нужна функциональность, которую Unity3D не предоставляет, вы можете сделать это. DLL кодирование.
Где это оставить C ++? C ++ - это язык, и есть много концепций программирования, которые вы делаете на C ++, которые вы можете использовать в Unity3D, без управления памятью или, возможно, шаблонов (в Unity 3.2 спецификации языка были улучшены, чтобы охватить, например, замыкания).
Итак, как я уже сказал, это не совсем C ++ против Unity3D. Это больше «C ++ плюс библиотеки / SDK или катите свой собственный движок» против Unity3D. Это зависит от ваших целей и задач. Для высококлассных игр или игр, где вам нужен контроль над конвейерным рендерингом или вводом, вы можете использовать C ++ плюс движок, который позволяет вам запутаться. Если нет, я выберу Unity3D в качестве выбора по умолчанию для 3D-игр.
Тем не менее, знания в Unity3d не находятся под капотом, но это хорошее место для начала изучения всего процесса разработки игр. Например, вам, вероятно, понадобится учеба в семестр, чтобы написать рендер и загрузить модель в OpenGL, а также базовый сценограф и ввод. Вы получите это в Unity3D менее чем за день.