O principal "profissional" do Uinty3D é que ele é louco rapidamente. Não estou falando sobre desempenho aqui, mas sobre velocidade de desenvolvimento. Você tem:
- Pipeline de ativos unificado. Não há necessidade de gastar tempo no subsistema de recursos, nem rotinas de importação de bugs para escrever e corrigir: basta soltar um arquivo na pasta e ele funciona.
- Editor de nível integrado. Não é necessário gastar tempo com ferramentas de nível: basta ir direto aos negócios.
- Ótimo suporte para ajustes e depuração: todas as suas variáveis de jogo são mostradas da maneira que você joga e também podem ser alteradas rapidamente - e tudo isso sem escrever uma única linha de código. Pause o jogo a qualquer momento ou passe pelo código de uma instrução de cada vez.
- Biblioteca bastante abrangente de componentes prontos. Renderização, som, física, controles - muitos códigos "padronizados" já foram gravados.
- Mono como um host de script. Embora se possa discutir sobre os méritos do C # como idioma, a biblioteca de classes base do Mono oferece diversas funções. Coleções, E / S, multithreading e LINQ insanamente expressivo, aceleram consideravelmente o desenvolvimento.
Além disso, o Unity3d é realmente bom em várias plataformas. Obviamente, você não pode criar, por exemplo, um jogo .exe do Windows e, em seguida, magicamente fazê-lo "funcionar" no iPhone; mas o Unity fica bem perto disso. O que é necessário é "ajustar" mais do que "portar".
Obviamente, em alguns casos, o Unity3D não é o ideal. O modo multijogador de rede integrado no Unity é adequado para algumas jogadas ponto a ponto da LAN, mas qualquer coisa que exija servidor central praticamente exige que você escreva todo o código de rede do zero. O sistema de GUI do Unity é bastante peculiar e lento, portanto, tornar as GUIs complexas no jogo é uma dor. No entanto, todos os outros sistemas de GUI de jogos que eu já vi são dolorosos também, então o Unity não é tão ruim assim.
E, é claro, o Unity3D é um pouco menos flexível que "mecanismos de jogos" como o OGRE, que oferecem apenas um código-fonte / biblioteca. Seu desempenho não é exatamente de primeira e, como você só possui uma caixa de proteção de script, não pode usar alguns hacks inteligentes de baixo nível para aprimorá-la. Por exemplo, se o renderizador em árvore embutido do Unity não satisfazê-lo por algum motivo, você não pode escrever o seu próprio (bem, você poderia, mas seria trabalhar com scripts e provavelmente seria muito lento e muito aborrecido ) Ainda assim, é possível fazer praticamente qualquer coisa com o Unity, desde que você não se importe em perder um pouco de desempenho.
O maior "golpe" do Unity3D, no entanto, é o controle de origem. Como já mencionado, o próprio Asset Server da Unity custa um centavo bonito. E é péssimo, muito, muito difícil. Nem tem ramificação. Enquanto o Unity3D suporta teoricamente sistemas SCM de terceiros, usá-los também é arriscado. Vi as configurações de importação "magicamente" mudarem após a confirmação do SVN ou os parâmetros de todos os objetos desaparecerem após o uso do Perforce. Tudo isso pode ser contornado, mas de qualquer maneira, Unity3D + Source control = pain.
Então, para realmente responder sua pergunta. Acredito que o Unity3D é uma das melhores, se não a melhor, escolha de mecanismo de jogo para um "pequeno" jogo. Especialmente no estágio de protótipo.
Dito isto, se estamos falando de um projeto educacional, eu recomendo. Para aprender como os jogos funcionam, é melhor escrever um no nível mais baixo possível. Motores de jogo são uma ótima ferramenta; mas para usá-lo para obter ganhos máximos, é necessário entender como eles funcionam e por que eles funcionam dessa maneira. E a melhor maneira de aprender isso é escrever seu próprio mecanismo de jogo - mesmo que no final as coisas sejam ruins.