O principal problema, pelo que posso ver, não é C ++ ou Unity3D, mas você precisa de uma solução de alto nível ou de baixo nível .
Uma solução de baixo nível é aquela que você suja nos processos de entrega de entrada, gerenciamento de memória ou carregamento dos modelos. Uma solução de alto nível é a qual você obtém um pacote interessante, como o Unity3D.
Para mim, o uso do Unity3D (ou qualquer outro mecanismo de jogo) ou C ++ depende dos objetivos do seu jogo e projeto.
Use o Unity3D, se o tempo de desenvolvimento tiver que ser rápido e / ou seu jogo não exigir muito desempenho ou não estiver no topo da performance gráfica / computacional. Se você deseja se concentrar no jogo, e as ferramentas padrão fornecidas pelo Unity3D estão corretas, considere usar o Unity3D
C ++ com outras bibliotecas, se você tiver mais tempo de desenvolvimento, o jogo requer mais poder computacional / gráfico ou emprega alguma tecnologia que o Unity3D não pode incorporar.
O bom do Unity3D é que ele ainda emprega linguagens de script que espelham o desenvolvimento do mundo real (C # ou JavaScript). Os conceitos de OOP e engenharia de software que você aprende (Singletons, fachada, máquinas de estado, decoradores, composição) podem ser aplicados no Unity3D. Ajuda a cuidar dos processos de corte de cookies, como gerenciamento de recursos, gráfico de cena, carregamento de modelo, renderização, salvamento de cenas e etc. Ainda melhor, se houver uma funcionalidade necessária que o Unity3D não forneça, você poderá Codificação DLL.
Onde isso deixa C ++? O C ++ é uma linguagem, e existem muitos conceitos de programação que você faz no C ++ no Unity3D, sem gerenciamento de memória ou talvez modelos (com o Unity 3.2, as especificações da linguagem foram aprimoradas para cobrir fechamentos, por exemplo).
Então, como afirmei, não é realmente C ++ vs. Unity3D. É mais "C ++ plus libraries / SDK ou role seu próprio mecanismo" vs. Unity3D. Depende de suas metas e objetivos. Para jogos de ponta ou jogos nos quais você precisa ter controle sobre o pipeline ou a entrada de renderização, convém usar o C ++ mais um mecanismo que permita que você mexa por baixo do capô. Caso contrário, eu uso o Unity3D como minha opção padrão para jogos em 3D.
No entanto, o conhecimento com o Unity3d não está sob o capô, mas é um bom ponto de partida para aprender o processo geral de desenvolvimento de jogos. Por exemplo, você provavelmente precisará de um semestre para estudar para escrever um renderizador e carregar um modelo no OpenGL, além de um gráfico e uma entrada básicos de cenário. Você faz isso no Unity3D em menos de um dia.