Quais são os prós / contras do Unity3D como uma opção para criar jogos? [fechadas]


64

Estamos fazendo nosso projeto escolar com o Unity3d, já que eles estavam usando o Shiva no ano anterior (o que me parece horrível), e eu queria saber o seu ponto de vista para esta ferramenta.

Prós:

  • multiplataforma, eu até ouvi dizer que o Google vai implementá-lo no Chrome
  • Tudo que você precisa está aqui
  • linguagens de script torna uma boa escolha para pessoas que não estão programando gurus

Contras:

  • multiplayer?
  • proprietário, você é totalmente dependente da unidade e do seu limite e não pode estendê-lo
  • é menos "fazer um jogo do zero"
  • C ++ teria sido uma coisa legal

Eu realmente acho que esse tipo de ferramenta é interessante, mas vale a pena usar na escola para um projeto que envolve mais de 3 pessoas de programação? O que realmente aprendemos em termos de programação usando esse tipo de ferramenta (eu estou bem com python e js, mas odeio c #)? Poderíamos ter usado o Ogre, mesmo que aprendêssemos x diretamente a partir de janeiro ...


Outra Con seria você precisa estar familiarizado com modelagem 3D / design, mas um outro olhar para o site e isso não parece o caso .. como jogos 2D são possíveis
Johnny quest

11
@ Johnny Quest Não é exatamente para o que se destina, pode ser difícil de usar.
Assustadores

7
'C ++ teria sido uma coisa legal' - sério, o que? Escrever em C ++ é 'legal' agora? Pessoalmente, odeio a linguagem (toda a digitação, Python até o fim: p), mas certamente é um ótimo recurso de linguagem e biblioteca.
The Duck comunista

11
A unidade é um mecanismo incrível, mas ... Alguns contras a serem observados: 1) A unidade tende a ser um pouco da memória. É preciso mais memória do que você pensa; provavelmente devido ao armazenamento em cache de coisas como texturas. Isso pode causar problemas na depuração e até erros de OOM em dispositivos móveis. 2) É difícil localizar, endereçar e corrigir problemas de desempenho, pois você está lidando com uma caixa preta (sem código fonte). Examine seus shaders de perto e observe como você gerencia a cena.
milkplus 26/09/12

2
@ milkplus: é por isso que acho que a unidade não é o que o aluno deve aprender. exemplo: eu posso ensinar os alunos sobre programação, ensinando-os sobre python no início, mas em um momento ou outro, você precisa ensiná-los sobre como as coisas de nível funcionam, mesmo o básico. As pessoas devem usar uma ferramenta quando souberem tudo sobre o que essa ferramenta faz. Caso contrário, é um desastre esperando para acontecer. Você nem sempre pode justificar a citação de Knuth com algo tão complexo quanto a unidade.
Jokoon 26/09/12

Respostas:


66

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.


3
citarei "Pipeline de ativos unificado. Não é necessário 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".
Nkint 5/02

7
e "O maior" golpe "do Unity3D, no entanto, é o controle de origem".
Nkint 5/02

2
e "Dito isto, se estamos falando de um projeto educacional, eu recomendo contra isso".
Nkint 5/02

Sobre o seu problema de "geração de árvore". Eu acho que, especialmente em C #, você pode escrever um gen de árvore C ++, colocá-lo em uma .dll e tratá-lo como c ++ gerenciado. Assim, você pode teoricamente acessar suas próprias "correções de mecanismo" na unidade.
Davidfire300

Admito que o sistema Unity GUI 2.0 nada mais é do que o sistema "renderizar um texto reto", mas é extensível muito, muito fácil. Veja o @AffinityUI ou outros projetos de interface do usuário do Unity que são muito leves, de código aberto e fazem o sistema de interface do usuário valer a pena.
precisa saber é o seguinte

28

Começarei comentando sua lista:

  • O script não é apenas um benefício para não programadores. Ser um (bom) programador é mais do que apenas conhecer um idioma, é saber como desconstruir problemas e pensar de uma maneira específica. As linguagens de script podem permitir que um programador aproveite essas habilidades de pensamento crítico de ordem superior para produzir resultados mais poderosos e mais interessantes em menos tempo do que ele ou ela pode precisar para produzir resultados equivalentes, ao mesmo tempo em que se preocupa com detalhes de nível inferior que algumas linguagens (C ++ vem à mente) forçar a imagem.

  • O suporte para vários jogadores (ou a falta dele) é apenas um problema, de uma forma ou de outra, se o seu projeto precisar.

  • Não vejo como "proprietário" é um golpe. Se este é um projeto da escola, você provavelmente não vai querer perder tempo invadindo a fonte da estrutura que você usa, ou algo assim. Além disso, o DirectX também é proprietário.

  • Não há absolutamente nada de errado em usar estruturas ou ferramentas de nível superior como o Unity. "Fazer um jogo do zero" não é uma conquista - o que exatamente você considera "do zero?" Você ainda estará usando a API gráfica de outra pessoa. O tempo de execução de outra pessoa (até C requer uma biblioteca de tempo de execução). "Fazer um jogo" é o que merece respeito, não "fazer um jogo sem usar ferramentas úteis".

  • C ++ ser uma coisa "legal" é um pouco subjetivo. O idioma é usado com muita frequência por profissionais do setor, mas provavelmente não pelos motivos que você imagina. Como idioma, está começando a mostrar a sua idade e pode ser extremamente complicado em comparação com as opções mais modernas. Em qualquer caso, as linguagens são apenas ferramentas e um bom programador deve poder escolher novas com relativa facilidade.

A grande vantagem de usar o Unity para o projeto da sua escola é que ela é uma estrutura de alto nível, com muito trabalho de infraestrutura já implementado para você - isso permitirá que você se concentre no seu jogo e não na construção de uma fundação. Você tem, presumivelmente, uma janela relativamente limitada para produzir este jogo, para que, quanto mais você possa aproveitar as ferramentas existentes, mais tempo terá para produzir lógica ou ativos específicos para o seu jogo e fazer com que ele pareça e se sinta mais completo - existe uma curva de aprendizado para o Unity, mas você acaba com muito mais à sua disposição muito mais rapidamente.

Uma desvantagem é que você está potencialmente gastando tempo aprendendo uma ferramenta específica que envolve conhecimento que pode não ser transferível, especialmente se você decidir que o fluxo de trabalho e o ambiente do Unity simplesmente não são para você e nunca mais deseja usá-lo . Além disso, o Unity não possui o fluxo de trabalho 2D mais óbvio - ele é muito focado em jogos em 3D, que toda a sobrecarga de ativos de arte costuma envolver. Mas acho que, para um projeto escolar que você está descrevendo, o Unity é uma boa escolha.


13
cito "Criar um jogo" é o que merece respeito, não "criar um jogo sem usar ferramentas úteis".
Nkint 5/02

2
"Não há absolutamente nada de errado em usar estruturas ou ferramentas de nível superior como o Unity." Fazer um jogo do zero "não é uma conquista - o que exatamente você considera" do zero? ", Não há absolutamente nada de errado, mas trata-se de mente que as pessoas que criam novas tecnologias estão indo como baixo nível possível, por exemplo, Uncharted 2 usado até mesmo um em casa API gráfica modificada.
concept3d

11
Qualquer desenvolvedor que queira estar na vanguarda absoluta da computação gráfica precisará se concentrar no nível mais baixo e criar seu próprio mecanismo com o jogo; mas isso é cerca de 1% de todos os desenvolvedores de jogos que parece. Se uma empresa estivesse desenvolvendo um jogo tão avançado quanto Uncharted 1, no momento em que Uncharted 3 fosse lançado, provavelmente poderia usar alguma estrutura existente (não necessariamente Unity). A questão é: você está criando Uncharted 4?
Katana314

9

Um grande problema com o Unity é o controle de origem. Se você não estiver trabalhando em equipe, isso não será tão importante (sem dúvida), mas provavelmente não será esse o caso.

Você pode usar o Unity Asset Server, mas isso requer 1) Unity Pro (US $ 1500) e 2) uma licença do Asset Server por assento (US $ 500). Suponho que você possa obter algum tipo de desconto educacional, mas não é gratuito.

Como alternativa, você pode usar algo como SVN with Unity. Para suportá-lo adequadamente, você ainda precisa do Unity Pro.

Você não pode realmente apenas verificar uma versão não profissional do Unity no SVN e esperar que ele funcione perfeitamente. Seu mecanismo para vincular GUIDs a ativos e assim por diante não é exatamente seguro para SCM.


A funcionalidade multiplayer é bastante decente, embora, para ser honesto, eu não tenha enviado um jogo com ela. Em teoria, você apenas anexa as visualizações de rede às coisas e diz o que deseja serializar para configurar a replicação corretamente. A partir daí, há algum trabalho de interface do usuário para conectar-se a outros pares e configurar. É principalmente ponto a ponto, no entanto. Você pode fazer a programação cliente / servidor executando a unidade no modo sem cabeça, mas eu não mexi com isso. Mas apenas fazer com que a pessoa A percorra a tela da pessoa B é muito fácil e rápido.

Também o C # é positivo , no que me diz respeito. LINQ é super expressivo. Possui manipulação de exceção e coleta de lixo adequadas. Possui paradigmas muito mais modernos, como delegados, lambdas, interfaces e melhor suporte genérico que o C ++. ( Edit : isso é obviamente controverso. Meu argumento é que C # dificilmente é uma linguagem ruim . Não quero entrar em um longo debate sobre os prós e contras da linguagem vs. C ++.)

O maior ponto positivo do uso do Unity, no entanto, é provavelmente o canal de arte. Você pode pegar um arquivo PSD ou Max (supondo que você tenha o 3ds max instalado) na pasta e ele seja importado.


3
@DeadMG, sim, muito bem, na verdade. Sim, eu sei sobre impulso, metaprogramação de modelos, etc. Mas acho o C # uma linguagem mais moderna.
Tétrada

3
@DeadMG Acho que o ponto é que o C # é extremamente suave para muitos casos de uso em que o C ++ deixa muito a desejar. Não que o C ++ não possa fazer essas coisas.
Nate

3
A única coisa em sua lista que eu poderia discordar era 'melhor suporte genérico que C ++'.
Kylotan

11
@Kylotan "for (vetor <vetor <int>> :: iterador iterador = scores.begin (); iterador! = Scores.end (); iterador ++) {" VS "foreach (var scoreset in scores)" .. .yup, eu estou com c #.
Katana314

3
@ Katana314 Claro em C ++ 11: for ( auto x : xs ).
Eric

6

Atualização: O Unity agora oferece todos esses recursos, mesmo na versão gratuita, portanto desconsidere a resposta abaixo.


Algo digno de nota - se você estiver usando a versão gratuita do Unity3D, não poderá usar vários efeitos, incluindo shaders de pós-processamento (como bloom) e, muito mais importante, sombras dinâmicas. Obviamente, eles não afetam muito o fluxo de trabalho do projeto, mas impõem restrições ao que pode ser alcançado gratuitamente com o mecanismo.


11
Isso não é mais preciso e deve ser atualizado ou removido.
MichaelHouse

@ Byte56 Obrigado. No futuro, você poderá atualizar as postagens antigas sem precisar deixar um comentário.
Michael Younkin

Eu estava respondendo a um sinalizador para remover esta resposta e não estava sugerindo que você a atualizasse para dizer que não é mais precisa. Sugeri que você o atualizasse para ser exato ou removesse-o. Atualmente, esta resposta não responde aos prós e contras do Unity 3D como opção. Tenho certeza de que você pode descobrir uma maneira de salvá-lo. (Você pode atualizá-lo para incluir todos os recursos que o Unity agora oferece e os que não oferecem de graça).
MichaelHouse

3

A resposta de Nevermind cobre as coisas com bastante profundidade, mas apenas para falar sobre o lado do controle de origem, na verdade não é tão terrível assim que você aprende a procurar algumas dicas:

  • Primeiro, sim, o Asset Server é caro e bastante horrível para todos, exceto para o uso básico. Seu principal benefício é ser integrado ao Unity e, embora seja valioso pela facilidade de uso e valha a pena em projetos mais simples, para qualquer coisa maior (que normalmente seriam os projetos com orçamento para o AS), apenas não é flexível o suficiente.
  • Passando para o controle de versão externo, é importante perceber que os Meta Files precisam ser tratados como qualquer outro ativo e sempre adicionados / atualizados no controle de versão. Não fazer isso é provavelmente o que aconteceu no cenário de configurações do Nevermind desaparecendo.
  • Finalmente, trabalhando com qualquer sistema de controle de versão no Unity (incluindo o Asset Server), a comunicação da equipe se torna essencial ao trabalhar com ativos binários para evitar atrapalhar o trabalho um do outro.

Caso você queira mais detalhes sobre esses pontos, publiquei um tempo atrás sobre o uso do git com o Unity com base na minha experiência em alguns projetos bastante grandes do Unity: http://goo.gl/ivJVR


Ok, uau, desculpe o necropost. Acabei de perceber que isso foi perguntado (e respondido) em 2011! Eu adicionei a ela porque apareceu na carta de notícias stackexchange gamedev desta semana .
FlintZA 01/07/2013

Não existe "necro" no SE. Caso em questão, meu comentário. : P
Cypher

2

Na realidade. Multiplayer é suportado. É simplesmente uma questão de escolher um servidor que você deseja executar seu jogo.

O mais popular no mercado agora é o "SmartFox Server". Eles oferecem alguns pacotes diferentes, todos gratuitos (até certo ponto). Só é gratuito se você planeja ter uma certa quantidade de jogadores, pois cada pacote permite uma certa quantidade de jogadores "gratuitamente".

Se você optou por atualizar, o preço é bastante alto para um desenvolvedor independente. Então ... A longo prazo, se você tiver muitos jogadores em seu servidor, precisará cobrar pelo jogo em vez de enviá-lo em sites como o Download.com como um jogo completo gratuito. Isso pode não ser um problema para alguns, mas a maioria de nós não pode pagar US $ 2.500 do bolso para um servidor.

Por exemplo - SmartFox pro permite 20 jogadores gratuitamente. Se você quiser fazer o upgrade, isso custará 500 Euros, o que é um pouco mais nos EUA, em torno de 600-700, e isso permite 100 conexões.

A próxima atualização é para um número máximo de jogadores de 500, e é de 1000 Euros, mas ... Você não precisa pagar os 1000, mas sim a diferença.

Portanto, você terá que pagar apenas 500 Euros a mais, em vez dos 1000 inteiros. As últimas atualizações suportam uma quantidade ilimitada de conexões, por 2.000 Euros. O que equivale a quase US $ 3.000.

Portanto, se você atualizar das 500 conexões, paga 1000 Euros, se atualizar de 100 conexões, paga 1.5000 Euros e, é claro, 2.000 Euros para atualizar gratuitamente.

Além disso, este servidor é muito fácil de configurar com o Unity e existem vários vídeos tutoriais de como fazê-lo exatamente no Youtube.


Eu trabalhei extensivamente com o SmartFox Server desde 2005, e isso é demais. Muito estável e maduro.
PippoApps.com
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.