Eu prefiro C / C ++ do que o Unity e outras ferramentas: é um grande problema para um desenvolvedor de jogos? [fechadas]

35

Temos um projeto de grande jogo usando o Unity na escola. Há 12 de nós trabalhando nisso. Meu professor parece estar convencido de que é uma ferramenta importante para ensinar aos alunos, pois faz com que eles pareçam do nível superior ao nível inferior.

Eu posso entender o ponto de vista dele e me pergunto: a unidade é um mecanismo tão importante nas empresas de desenvolvimento de jogos? Existem muitas empresas usando-o porque não podem se dar ao luxo de usar outra coisa? Ele está falando como se a Unity fosse um grande participante na criação de jogos, mas eu só vejo isso para pequenas empresas independentes de jogos que querem fazer o jogo o mais rápido possível.

Você acha que a Unity tem tanta importância na indústria? Põe em perigo o valor das habilidades em C ++?

Não que eu não goste do Unity, apenas que não aprendo nada com ele, prefiro dar pequenos passos com o Ogre ou o SFML.

Além disso, também temos exercícios práticos em C ++, mas esses são apenas exercícios com teoria, nada demais.

jokoon
fonte
9
O ponto de C ++ e OOP é a reutilização de objetos. A unidade é um excelente exemplo disso e da portabilidade entre plataformas. Eles oferecem todas as ferramentas necessárias para iniciar um jogo no XBox ou no iPhone ou no Wii. Você está me dizendo seriamente que prefere reescrever tudo isso em C ++ do zero?
Stephen Furlani
2
Absolutamente não, não é isso que eu quero dizer. Estou apenas dizendo que não estou gostando dos idiomas de coleta de lixo com os quais é enviado e também do fato de que você não pode alterar o código por ser proprietário: você não pode ajustá-lo tanto quanto pode modificar outro mecanismo existente . Seu ponto de vista é válido, mas se eu o seguir, as empresas também poderão reutilizar o mecanismo anterior em vez de apenas mudar para o Unity. Com o Unity, você se apega a algo que realmente não pode mudar; isso é sempre o maior ponto negativo para mim quando penso em tais ferramentas: um mecanismo proprietário não tem esse problema.
jokoon
2
Bem, você pode alterar o Unity assumindo que você obtém uma licença de origem (que é cara, como a maioria das outras licenças de origem profissionais). Também é atualizado com bastante frequência, por isso não é realmente estático em termos de conjunto de recursos.
Tétrada
Esta é basicamente uma pergunta "que tecnologia usar". Também é mais orientado para discussão / opinião. Infelizmente não posso votar para fechar por uma segunda vez ...
bummzack

Respostas:

34

A unidade é uma solução perfeitamente válida nesse contexto. Imagine por um segundo ter 12 pessoas, a maioria das quais ainda está no processo de aprender C ++, escrevendo um aplicativo de jogo grande e complexo usando-o. Na quantidade de tempo gasto na depuração sozinho, você provavelmente poderá escrever outro jogo no Unity.

Não estou dizendo que saber como usar C ++ não é importante - é importante, especialmente se você planeja ingressar na indústria de jogos 'mainstream'. Mas talvez o seu instrutor esteja correto neste caso - use este projeto como uma experiência de aprendizado em como pensar em arquitetar um jogo e divirta-se fazendo isso. Nesse processo, tente aprimorar suas habilidades em C ++ usando exercícios ou até mesmo fazer pequenos jogos enquanto isso usando SFML ou alguma outra estrutura básica.

Quando tudo estiver pronto, você aprenderá muito, provavelmente se tornará um programador melhor, e seu próximo projeto poderá ser abordado em C ++ com muito mais confiança.

James
fonte
2
Curiosamente, existem escolas que ensinam puramente C ++ e esperam que os alunos construam um mecanismo de jogo inteiro e um jogo do zero, apesar de ainda estarem no processo de aprender C ++. Obviamente, praticar uma habilidade é como você a aprende (não palestras e pequenos trabalhos de casa, por projetos maiores de um semestre ou de um ano), e é por isso que as escolas produzem programadores de primeira linha. Programadores capazes de pegar ferramentas como o Unity muito rapidamente, ou qualquer outro mecanismo. É melhor forçar os alunos a aprender as coisas difíceis, pois as coisas fáceis não serão um problema depois.
23612 Sean Middleditch
Nem todo o desenvolvimento de jogos é programação, e o uso do Unity não é necessariamente "evitar coisas difíceis". Apenas enfatiza diferentes coisas difíceis do que implementar do zero. Deu design ao invés de programação. Se um jogo fosse implementado do zero, eu esperaria uma "arte do programador" muito mais primitiva e nenhum personagem ou enredo.
wrosecrans
43

A unidade está crescendo em popularidade no setor, principalmente em empresas menores. No entanto, é um excelente ambiente de ensino. É uma ferramenta de ensino importante, mas não particularmente comum entre as empresas tradicionais. Não há problema em você não preferir.

Deixe-me notar uma coisa aqui, porém, pois muitas vezes vejo uma confusão entre os estudantes de programação. As "habilidades em C ++" não são muito úteis a longo prazo. O que você deve procurar são "habilidades de programação" e "habilidades de design". Se você entende os conceitos da linguagem de programação e como um sistema de software é montado, a linguagem realmente não importa. Não me considero um desenvolvedor incrível, mas posso pegar um novo idioma e produzir código útil em um dia ou dois, porque entendo os fundamentos.

O Learning Unity o tornará melhor em C ++.

Gregory Avery-Weir
fonte
Gameforge e BigPoint são empresas líderes mundiais e usam Unidade :)
daemonfire300
11
+1 por ser uma resposta muito boa. Aprender - um mecanismo de jogo é uma coisa muito importante para as escolas, porque 99% do tempo você não estará criando um do zero. Ser capaz de mergulhar em um mecanismo existente e reconhecer as partes dele, discernir o fluxo de dados e essas são coisas muito importantes. Como mencionado acima, a linguagem não importa, apesar de ser C / C ++ 99% do tempo, mas ser capaz de entender o mecanismo, ou mais geralmente apenas o código de outra pessoa, é uma habilidade valiosa em qualquer campo de programação ... especialmente o tempo de palavra de alta tensão crítica que é jogos de vídeo :)
James
11
Eu meio que discordo dessa resposta. Para mim, existem diferenças entre scripts e programadores. Os desenvolvedores do Unity são programadores, os usuários do Unity são scripts. O resultado é o mesmo, eles fazem jogos, mas a longo prazo, usar o Unity pode ser um problema. A indústria de jogos é rica e agora permite ferramentas como o Unity, mas para mim é porque os computadores são mais rápidos. para que você possa jogar muito código, funciona: a unidade é claramente feita para a velocidade do desenvolvimento, algo que o mercado gosta por causa de dólares, mas não acho que isso seja uma vantagem real.
jokoon
14
jokoon: Qual é a diferença entre script e programação? Um usuário avançado do Unity grava shaders, gerencia a ordem de renderização e escreve código AI. Os "scripts" do Unity são compilados e podem ser estendidos com codificação de baixo nível, honesta a deusa, se você desejar. E uma boa codificação Unity segue os mesmos princípios que uma boa codificação não-Unity. Não há diferença mágica entre os dois paradigmas.
Gregory Avery-Weir
9

Existem muitas empresas usando-o porque não podem se dar ao luxo de usar outra coisa?

Sim, mas "pagar" é muito mais do que apenas valores em dólares.

Sim, o conjunto de recursos que o Unity Pro oferece a você pelo custo que eles cobram é ridículo, especialmente considerando o fato de serem licenças de assento em vez de licenças por título.

Mas, além disso, é uma ferramenta muito fácil de usar. Você não está gastando tanto tempo treinando artistas e designers como usar o pipeline de arte. É fácil dizer "basta arrastar suas texturas e modelos e eles estão prontos.

Além disso, é uma das poucas ferramentas que permitem fazer 3D em um navegador com qualquer tipo de regularidade. Eles suportam praticamente todas as plataformas de sombreadores, desde funções fixas até DX9 +, além de Mac e Windows. Somente essa tecnologia é inestimável se você deseja atingir o crescente mercado de "jogos baseados em navegador".

Do lado da programação, o que você obtém do Unity é uma compreensão firme do design de componentes (em comparação com o lançamento de seu próprio mecanismo C ++, que geralmente é muito pesado no lado da herança), bem como um ambiente visual e muito rápido para tentar código do jogo. Esperamos que você aprenda boas práticas de design usando o Unity, que você pode adotar para futuros mecanismos C ++.

Claro, é bom ter uma preferência de um idioma em detrimento de outro. Pessoalmente, prefiro C # sobre C ++. Mas qual idioma você usa é realmente orientado pelos requisitos do projeto mais do que qualquer outra coisa. Os desenvolvedores não podem se dar ao luxo de ser fanboys, já que você não quer ficar fora do mercado porque, por um motivo ou outro, não gosta das ferramentas ou do idioma.

Além disso, uma vez que você realmente aprende um segundo idioma, pode ver que, na maioria das vezes, está apenas aprendendo novas sintaxes e paradigmas, e não é tão difícil, geralmente, adicionar novas ferramentas ao seu cinto de ferramentas. Sim, você deve aprender e entender C ++, mas em um nível alto, você precisa entender primeiro o bom design.

Tetrad
fonte
esclarecimento: Você quer dizer que a licença do Unity Pro vale a pena em comparação com a antiga e simples Unity? Seu comentário não me foi muito claro.
Kyle C
7
Não usei a de graça, apenas que a licença de US $ 1500 / assento é muito barata em comparação com outras licenças de motores comerciais.
Tetrad
No momento, não há problemas ao usar a versão gratuita, existem apenas pequenas restrições.
XandruCea
9

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.

Extrakun
fonte
ou trabalhe com o Ogre3d!
jokoon
A última vez que trabalho com o Ogre3D foi há muito tempo; Eu acho que exige mais trabalho do que o Unity3D para iniciar um jogo, e é um bom meio termo dar uma olhada em como as coisas secretas funcionam.
Extrakun
+1 neste. Você não pode preferir C / C ++ e Unity por si só, porque é uma coisa de maçãs e laranjas. O que você pode preferir, porém, é a ideia de trabalhar no nível mais baixo de desenvolvimento fornecido pelo C / C ++, ou no desenvolvimento de nível superior que a Unidade permite.
Tim Holt
8

Não, o Unity3D de maneira alguma põe em risco as habilidades de C ++. De fato, conhecer C ++ é muito mais importante para um programador de jogos.

O Unity3D é uma ferramenta realmente ótima para o desenvolvimento de jogos. Eu realmente gosto, e o recomendaria para praticamente qualquer jogo, especialmente para equipes pequenas. Mas o próprio Unity3D é escrito em C ++; e você precisa conhecer C ++ (e também várias outras coisas de baixo nível) para realmente entender como funciona.

Mesmo se você usar o Unity3D, apenas as habilidades em C ++ e a compreensão de baixo nível dos princípios e algoritmos envolvidos permitirão usá-lo em todo o seu potencial. Isso também se aplica a outros mecanismos de jogos.

E para fazer um trabalho realmente bom, para extrair todo o último desempenho da sua plataforma de escolha e compor o maior número possível de efeitos e algoritmos de ponta, você não pode usar nada além de C / C ++. Com pedaços de montador, provavelmente.

deixa pra lá
fonte
Esta é a resposta que eu estava esperando para +1:]
Notabene
3

Até onde eu sei, isso depende da sua plataforma de destino, os jogos AAA e os console (XBOX, Wii, etc) normalmente estarão em C ++ para obter o máximo desempenho, no entanto, se você estiver escrevendo um jogo baseado em navegador, o Unity também é frequentemente usava.

No entanto, quanto à sua pergunta, acho que tem a ver simplesmente com ferramentas como o Unity, que oferecem uma grande estrutura padronizada para trabalhar, que em um projeto de meio ano pode fazer a diferença entre um protótipo meio cozido e um jogo bem elaborado.

Elva
fonte
3

Fui ao programa de mestrado em computação gráfica e tecnologia de jogos da Universidade da Pensilvânia, onde realizamos todos os nossos projetos nos níveis mais baixos, com projetos em C ++, OpenGL, CUDA, etc. Nossos projetos incluíam animação baseada em física, arquitetura de animação de personagens e IK, representando várias formas de curvas de Bezier ... você sabe, coisas realmente básicas que aproveitam a experiência em programação, álgebra linear e cálculo.

Em seguida, baixei o Unity e descobri que tudo o que trabalhei para criar estava empacotado neste pacote gratuito que qualquer pessoa pode usar.

Eu estava irritado com isso? Um pouco, é certo, mas descobri que ter esse entendimento da escola me torna muito mais perigoso quando utilizo ferramentas como o Unity. Atualmente, trabalho em jogos, onde trazemos jogos do conceito para o mercado em menos de um ano, e ainda sou o cara certo quando se trata de "essas coisas de matemática". Meu conselho para você é seguir os movimentos; você será absolutamente inestimável quando entrar no setor.

mseltzer
fonte
Você poderia (teoricamente) obter um distintivo . :)
Ciclope
Não há necroing aqui, porque as perguntas não envelhecem e "morrem" como nos fóruns. :) Respostas atrasadas são sempre boas.
Doppelgreener 7/10/12
0

Talvez eu esteja atrasado em responder, mas isso ajudará algumas pessoas a ter essa confusão.

Inicialmente, sou um programador de c ++, que costumava odiar usar mecanismos de terceiros (por exemplo, unidade), pois não sinto que haja muito processo de aprendizado envolvido em termos de programação de baixo nível.

Depois de tentar a unidade, deparei-me com as seguintes coisas que são necessárias para um desenvolvedor de jogos. Aqui não estou listando especificamente a unidade, mas listando as vantagens de ir na Perspectiva de ALTO NÍVEL.

  1. Entender como projetar em alto nível é mais importante do que se preocupar com otimizações de baixo nível.
  2. Os mecanismos que possuem o sistema de arquitetura de entidades (arquitetura baseada em componentes) ajudarão a aprender como exatamente essa arquitetura será útil.
  3. Você conhecerá a tecnologia mais recente (pelo menos a terminologia) e estará pelo menos atualizado com a indústria sobre os gráficos. - esse é o principal motivo pelo qual escolhi experimentar a unidade!
  4. Ignorando o tempo gasto em diferentes ferramentas de importação de recursos. (É claro que ainda gostarei de escrever meus próprios importadores 3D em c ++, pois será mais divertido no tempo livre)

Acima estão algumas das razões para escolher um mecanismo de alto nível. Mas, ao mesmo tempo, você não deve parar de aprender C ++ como o idioma mais necessário e útil para um desenvolvedor de jogos perfeito.

Primeiro, entenda a visualização de alto nível e faça alguns protótipos rápidos com o Unity e use essa experiência ao criar um bom jogo em c ++.

Em breve voltarei ao c ++, pois havia adquirido uma boa experiência em nível superior com a unidade :)

Boa sorte!

Ayyappa
fonte