Основным «профи» Uinty3D является то, что он быстро сходит с ума. Я говорю не о производительности, а о скорости разработки. У вас есть:
- Единый ресурсный трубопровод. Нет необходимости тратить время на подсистему ресурсов, не нужно глючить процедуры импорта для записи и исправления: просто поместите файл в папку, и это работает.
- Интегрированный редактор уровней. Не нужно тратить время на инструменты уровня: просто перейдите прямо к делу.
- Отличная поддержка настройки и отладки: все ваши игровые переменные отображаются прямо во время игры и могут быть изменены на лету - и все это без написания ни единой строчки кода. Приостановите игру в любое время или выполните пошаговые инструкции по коду.
- Довольно обширная библиотека готовых компонентов. Рендеринг, звук, физика, управление - много «стандартного» кода уже написано.
- Mono как сценарий хоста. В то время как можно спорить о достоинствах C # как языка, библиотека базовых классов Mono предлагает множество функций. Коллекции, ввод / вывод, многопоточность и безумно выразительный LINQ значительно ускоряют разработку.
Кроме того, Unity3d действительно хорош на нескольких платформах. Конечно, вы не можете создать, скажем, игру Windows .exe, а затем волшебно заставить ее «просто работать» на iPhone; но Unity довольно близко подходит к этому. То, что требуется, это «настроить» больше, чем «портировать».
Конечно, в некоторых случаях Unity3D не идеален. Сетевой многопользовательский режим, интегрированный в Unity, подходит для одноранговой игры в локальной сети, но все, что требует центрального сервера, в значительной степени требует написания всего сетевого кода с нуля. Система графического интерфейса Unity довольно причудливая и медленная, поэтому создание сложных внутриигровых графических интерфейсов является проблемой. Тем не менее, все другие игровые графические системы, которые я видел, тоже болезненны, так что в целом система Unity не так уж и плоха.
И, конечно, Unity3D немного менее гибок, чем «игровые движки», такие как OGRE, которые предлагают только библиотеку / исходный код. Его производительность не совсем превосходна, и, поскольку у вас есть только песочница для сценариев, вы не можете использовать некоторые умные низкоуровневые хаки для ее улучшения. Например, если встроенный рендерер дерева Unity по какой-то причине не удовлетворяет вас, вы не можете написать свой собственный (ну, вы могли бы, но он работал бы через сценарии и, скорее всего, был бы слишком медленным и слишком хлопотным). ). Тем не менее, с Unity можно делать практически все, если вы не против потерять производительность.
Самым большим «мошенничеством» в Unity3D является управление исходным кодом. Как уже упоминалось, собственный сервер активов Unity стоит довольно копейки. И это отстой, действительно, очень тяжело. У него даже нет ветвления. Хотя Unity3D теоретически поддерживает сторонние системы SCM, их использование также сопряжено с опасностью. Я видел, что настройки импорта «магическим образом» меняются после SVN-коммита, или параметры всех объектов исчезают после использования Perforce. Все это можно обойти, но в любом случае Unity3D + Source control = боль.
Итак, чтобы на самом деле ответить на ваш вопрос. Я считаю, что Unity3D - один из лучших, если не самый лучший, игровой движок для «маленькой» игры. Особенно в стадии прототипа.
Тем не менее, если мы говорим об образовательном проекте, я рекомендую против этого. Чтобы узнать, как работают игры, лучше написать игру на как можно более низком уровне. Игровые движки - отличный инструмент; но чтобы использовать его для максимальной выгоды, необходимо понимать, как они работают и почему они работают таким образом. И лучший способ научиться этому - написать собственный игровой движок, даже если в итоге он окажется дрянным.