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 ...
Respostas:
O principal "profissional" do Uinty3D é que ele é louco rapidamente. Não estou falando sobre desempenho aqui, mas sobre velocidade de desenvolvimento. Você tem:
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.
fonte
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.
fonte
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.
fonte
for ( auto x : xs )
.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.
fonte
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:
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
fonte
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.
fonte