Quels sont les avantages / inconvénients d'Unity3D en tant que choix pour créer des jeux? [fermé]

64

Nous faisons notre projet d'école avec Unity3d, car ils utilisaient Shiva l'année précédente (ce qui me semble horrible), et je voulais connaître votre point de vue pour cet outil.

Avantages:

  • multi plate-forme, j'ai même entendu Google va l'implémenter dans Chrome
  • tout ce dont vous avez besoin est ici
  • les langages de script en font un bon choix pour les personnes qui ne programment pas les gourous

Les inconvénients:

  • multijoueur?
  • propriétaire, vous êtes totalement dépendant de l'unité et de sa limite et ne pouvez pas l'étendre
  • c'est moins "faire un jeu à partir de zéro"
  • C ++ aurait été une bonne chose

Je pense vraiment que ce genre d’outil est intéressant, mais vaut-il la peine de l’utiliser à l’école pour un projet qui implique plus de 3 programmeurs? Qu'apprenons-nous vraiment en termes de programmation en utilisant ce type d'outil (je suis d'accord avec python et js, mais je déteste le C #)? Nous aurions pu utiliser Ogre à la place, même si nous apprenions directement x à partir de janvier ...

jokoon
la source
Un autre inconvénient est que vous devez être familiarisé avec la modélisation / conception 3D, mais un autre coup d'œil sur le site ne semble pas être le cas .. car les jeux 2D sont possibles
Johnny Quest
1
@Johnny Quest Tout simplement pas vraiment ce que cela voulait dire pourrait le rendre difficile à utiliser.
Spooks
7
'C ++ aurait été une bonne chose' - sérieusement, quoi? Écrire en C ++, c'est cool, maintenant? Personnellement, je déteste le langage (toute la dactylographie, Python jusqu’à: p), mais c’est certainement une excellente fonctionnalité de langage et de bibliothèque.
Le canard communiste
1
L'unité est un moteur incroyable, mais ... Quelques inconvénients à prendre en compte: 1) L'unité a tendance à être un peu une mémoire. Cela prend plus de mémoire que vous ne le pensez. probablement en raison de la mise en cache de choses comme les textures. Cela peut entraîner des problèmes de débogage et même des erreurs de MOO sur les appareils mobiles. 2) Les problèmes de performances peuvent être difficiles à localiser, à résoudre et à résoudre car vous avez affaire à une boîte noire (pas de code source). Examinez attentivement vos shaders et observez comment vous gérez la scène.
milkplus
2
@milkplus: c'est pourquoi je pense que l'unité ne doit pas être apprise par les étudiants. exemple: je peux parler aux étudiants de la programmation, en commençant par leur apprendre le python, mais à un moment ou à un autre, vous devez leur apprendre comment fonctionne le niveau, même les bases. Les gens devraient utiliser un outil quand ils savent tout ce qu’il fait. Sinon, c'est un désastre imminent. Vous ne pouvez pas toujours justifier la citation de Knuth avec quelque chose d'aussi complexe que l'unité.
jokoon

Réponses:

66

Le principal "pro" de Uinty3D est que c'est fou rapide. Je ne parle pas de performance ici, mais de vitesse de développement. Tu as:

  • Pipeline d'actifs unifiés. Pas besoin de passer du temps sur le sous-système de ressources, pas de routine d'importation boguée pour écrire et corriger: il suffit de déposer un fichier dans un dossier, et cela fonctionne.
  • Éditeur de niveau intégré. Nul besoin de passer du temps sur des outils de niveau: il suffit de passer directement aux affaires.
  • Excellente prise en charge du tweaking et du débogage: toutes vos variables de jeu sont affichées correctement pendant que vous jouez, et peuvent également être modifiées à la volée - et tout cela sans écrire une seule ligne de code. Mettez le jeu en pause à tout moment, ou passez en revue les instructions une par une.
  • Bibliothèque assez complète de composants prêts à l'emploi. Rendu, son, physique, contrôles - beaucoup de code "passe-partout" est déjà écrit.
  • Mono en tant qu'hôte de script. Alors que l'on peut discuter des mérites de C # en tant que langage, la bibliothèque de classes de base de Mono offre une multitude de fonctions. Collections, E / S, multithreading et LINQ incroyablement expressif accélèrent considérablement le développement.

En outre, Unity3d est vraiment bon sur plusieurs plates-formes. Bien sûr, vous ne pouvez pas créer, par exemple, un jeu Windows .exe et le faire fonctionner comme par magie sur l'iPhone; mais l'Unité s'en rapproche beaucoup. Ce qu'il faut, c'est "peaufiner" plus que "porter".

Bien sûr, dans certains cas, Unity3D n’est pas idéal. Le mode multijoueur réseau intégré à Unity convient à certains jeux entre réseaux locaux, mais tout ce qui nécessite un serveur central nécessite presque entièrement l'écriture de tout le code réseau. Le système d'interface utilisateur graphique d'Unity est assez lent et lent, il est donc difficile de créer des interfaces graphiques complexes dans le jeu. Cependant, tous les autres systèmes d’interface graphique de jeu que j’ai vus sont également douloureux, aussi celui d’Unity n’est pas si mauvais dans l’ensemble.

Et, bien sûr, Unity3D est un peu moins flexible que les "moteurs de jeu" comme OGRE, qui offrent uniquement une bibliothèque / code source. Ses performances ne sont pas vraiment excellentes et, comme vous n’avez qu’un sandbox de script, vous ne pouvez pas utiliser quelques astuces intelligentes de bas niveau pour l’améliorer. Par exemple, si le rendu d'arborescence intégré à Unity ne vous satisfait pas pour une raison quelconque, vous ne pouvez pas écrire le vôtre (eh bien, vous le pourriez, mais cela fonctionnerait à l'aide de scripts et serait probablement trop lent et trop fastidieux. ). Néanmoins, il est possible de faire à peu près n'importe quoi avec Unity, à condition de perdre un peu de performance.

Le plus gros "con" d'Unity3D, cependant, est le contrôle de source. Comme déjà mentionné, Asset Server d'Unity coûte un joli centime. Et ça craint, vraiment, vraiment dur. Il n'y a même pas de ramification. Tandis que Unity3D prend en charge théoriquement les systèmes SCM tiers, leur utilisation est également périlleuse. J'ai vu les paramètres d'importation «magiquement» changer après la validation de SVN, ou les paramètres de tous les objets disparaissent après l'utilisation de Perforce. Tout cela peut être contourné, mais de toute façon, Unity3D + Contrôle source = douleur.

Donc, pour réellement répondre à votre question. Je crois que Unity3D est l’un des meilleurs, sinon le meilleur choix de moteur de jeu pour un "petit" jeu. Surtout au stade du prototype.

Cela dit, si nous parlons d'un projet éducatif, je le déconseille. Pour apprendre comment fonctionnent les jeux, il est préférable d’en écrire un aussi bas que possible. Les moteurs de jeu sont un excellent outil. mais pour l'utiliser au maximum, il est nécessaire de comprendre comment ils fonctionnent et pourquoi ils fonctionnent de cette manière. Et la meilleure façon de le savoir est d'écrire votre propre moteur de jeu - même si cela s'avère vraiment nul.

Ça ne fait rien
la source
3
Je citerai "Pipeline d'actifs unifiés. Pas besoin de passer du temps sur le sous-système de ressources, pas de routines d'importation boguées pour écrire et réparer: il suffit de déposer un fichier dans un dossier, et cela fonctionne."
Nkint
7
et "Le plus gros" con "d'Unity3D, cependant, est le contrôle de source."
Décembre
2
et "Cela dit, si nous parlons d'un projet éducatif, je ne le recommanderai pas."
Décembre
A propos de votre problème "arbre gen". Je pense surtout en C #, vous pouvez écrire un arbre de génération C ++, le placer dans un fichier .dll et le traiter comme un c ++ géré. Vous pouvez donc théoriquement accéder à vos propres "correctifs de moteur" en unité.
daemonfire300
Je reconnais que le système Unity GUI 2.0 n’est rien d’autre que le système "rendre un rect avec texte", mais il est très facilement extensible. Regardez @AffinityUI ou d’autres projets d’interface utilisateur Unity très légers, à code source ouvert et valorisant le système d’interface utilisateur.
daemonfire300
28

Je vais commencer par commenter votre liste:

  • L'écriture de scripts n'est pas simplement un avantage pour les non-programmeurs. Être un (bon) programmeur, c'est plus que connaître une langue, c'est savoir déconstruire les problèmes et penser d'une manière particulière. Les langages de script peuvent permettre à un programmeur d’exploiter ces compétences de pensée critique d’ordre supérieur afin de produire des résultats plus puissants et plus intéressants en moins de temps que nécessaire pour produire des résultats équivalents, tout en se préoccupant des détails de niveau inférieur à certains langages (C ++). vient à l'esprit) force dans l'image.

  • Le support multijoueur (ou son absence) n’est un problème d’une manière ou d’une autre si votre projet en a besoin.

  • Je ne vois pas à quel point la "propriété" est un inconvénient. S'il s'agit d'un projet scolaire, vous ne voudrez probablement pas passer du temps à pirater la source du cadre que vous utilisez, ou quoi que ce soit. En outre, DirectX est également propriétaire.

  • Il n'y a absolument rien de mal à utiliser des frameworks ou des outils de niveau supérieur comme Unity. "Créer un jeu à partir de zéro" est un non-accomplissement - que considérez-vous exactement "à partir de zéro?" Vous allez toujours utiliser l'API graphique de quelqu'un d'autre. Le runtime de quelqu'un d'autre (même le C nécessite une bibliothèque runtime). "Faire un jeu" est ce qui mérite le respect, pas "faire un jeu sans utiliser aucun outil utile".

  • C ++ étant une chose "cool" est un peu subjectif. Le langage est très souvent utilisé par les professionnels du secteur, mais probablement pas pour des raisons que vous penseriez. En tant que langue, elle commence à montrer son âge et peut être extrêmement lourde par rapport aux options plus modernes. Dans tous les cas, les langues ne sont que des outils et un bon programmeur devrait pouvoir en découvrir de nouveaux avec une relative facilité.

Le grand avantage d’utiliser Unity pour votre projet d’école est qu’il s’agit d’un cadre de haut niveau avec de nombreux travaux d’infrastructure déjà en place pour vous - cela vous permettra de vous concentrer sur votre jeu et non sur la création d’une fondation. Vous disposez probablement d'une fenêtre relativement limitée pour la production de ce jeu. Plus vous pouvez exploiter les outils existants, plus vous aurez le temps de produire de la logique ou des ressources spécifiques à votre jeu, ce qui donnera à votre jeu une apparence et une convivialité. plus complet - il y a une courbe d'apprentissage pour Unity, mais vous vous retrouvez beaucoup plus rapidement à votre disposition beaucoup plus rapidement.

Un inconvénient est que vous êtes potentiellement sombrer dans le temps d' apprentissage d' un outil spécifique qui implique des connaissances qui pourraient ne pas être cessible, surtout si vous décidez que le flux de travail de l' unité et l' environnement ne sont tout simplement pas pour vous et que vous ne voulez jamais l'utiliser à nouveau . En outre, Unity ne dispose pas du flux de travail 2D le plus évident - il est très concentré sur les jeux 3D, ce qui entraîne tous les frais généraux liés aux ressources artistiques. Mais je pense que pour un projet d’école que vous décrivez, Unity est un très bon choix.

Josh
la source
13
Je citerai "Faire un jeu" est ce qui mérite le respect, pas "faire un jeu sans utiliser d'outils utiles".
Décembre
2
"Il n'y a absolument rien de mal à utiliser des frameworks ou des outils de niveau supérieur comme Unity." Créer un jeu à partir de rien "est un non-accomplissement - que considérez-vous exactement comme" à partir de zéro? " Remarquez que les créateurs de nouvelles technologies atteignent un niveau aussi bas que possible, par exemple Uncharted 2 a même utilisé une API graphique interne modifiée.
concept3d
1
Tout développeur souhaitant être à la pointe de l'informatique graphique devra se concentrer sur le niveau le plus bas et créer son propre moteur avec son jeu. mais il semble que ce soit environ 1% de tous les développeurs de jeux. Si une entreprise créait un jeu aussi avancé que Uncharted 1, au moment où Uncharted 3 sortait, elle pourrait probablement utiliser un cadre existant (pas nécessairement Unity). La question étant: Est-ce que vous créez Uncharted 4?
Katana314
9

Un problème majeur avec Unity est le contrôle de source. Si vous ne travaillez pas en équipe, cela importera moins (sans doute), mais ce ne sera probablement pas le cas.

Vous pouvez utiliser Unity Asset Server, mais cela nécessite 1) Unity Pro (1 500 USD) et 2) une licence Asset Server par poste (500 USD). Je suppose que vous pouvez obtenir une sorte de réduction éducative, mais ce n'est pas gratuit.

Alternativement, vous pouvez utiliser quelque chose comme SVN avec Unity. Pour le supporter correctement, vous avez toujours besoin de Unity Pro.

Vous ne pouvez pas simplement archiver une version non professionnelle d'Unity dans SVN et vous attendre à ce qu'elle fonctionne parfaitement. Leur mécanisme pour lier les GUID aux actifs, etc., n'est pas exactement compatible avec SCM.


La fonctionnalité multijoueur est assez décente, bien que pour être honnête, je n'ai pas livré de jeu avec. En théorie, vous n'attachez que des vues de réseau à des éléments et indiquez-leur ce que vous souhaitez sérialiser pour configurer correctement la réplication. À partir de là, certains travaux d’interface utilisateur permettent de se connecter à d’autres pairs et d’être configurés. C'est surtout peer-to-peer, cependant. Vous pourrez peut-être faire de la programmation client / serveur avec l’unité en mode sans tête, mais je ne l’ai pas foiré. Mais il est assez facile et rapide de faire en sorte que la personne A se promène sur son écran.

C # est également un point positif en ce qui me concerne. LINQ est super expressif. La gestion des exceptions et le ramassage des ordures sont appropriés. Il a beaucoup plus de paradigmes modernes comme délégués, lambdas, interfaces et un meilleur support générique que C ++. ( Edit : c'est évidemment controversé. Mon argument est que C # n'est pas un mauvais langage. Je ne veux pas me lancer dans un long débat sur les avantages et les inconvénients du langage par rapport au C ++.)

Le plus grand avantage d'utiliser Unity, cependant, est probablement le pipeline d'art. Vous pouvez prendre un fichier PSD ou Max (en supposant que 3ds max soit installé) dans le dossier et l’importer.

Tetrad
la source
3
@DeadMG, oui, très bien en fait. Oui, je connais le boost, la métaprogrammation des modèles, etc. Mais je trouve que C # est un langage plus moderne.
Tetrad
3
@DeadMG Je pense que le fait est que C # est extrêmement fluide pour de nombreux cas d'utilisation que C ++ laisse beaucoup à désirer. Non pas que C ++ ne puisse pas faire ces choses.
Nate
3
La seule chose sur laquelle je pourrais être en désaccord sur sa liste était "un meilleur support générique que C ++".
Kylotan
1
@Kylotan "pour (vecteur <vecteur <int >> :: iterator iterator = scores.begin (); iterator! = Scores.end (); iterator ++) {" VS "pour chaque recherche (var scores dans les scores)" .. .yup, je suis avec C #.
Katana314
3
@ Katana314 Bien sûr , en C ++ 11: for ( auto x : xs ).
Eric
6

Mise à jour: Unity fournit désormais toutes ces fonctionnalités, même dans la version gratuite. Veuillez donc ne pas tenir compte de la réponse ci-dessous.


Il convient de noter que si vous utilisez la version gratuite de Unity3D, vous ne pourrez pas utiliser plusieurs effets, notamment des shaders de post-traitement (comme bloom) et, bien plus important encore, des ombres dynamiques. Celles-ci n'auront évidemment pas beaucoup d'effet sur le flux de travail du projet, mais elles imposent des contraintes sur ce que l'on peut réaliser gratuitement avec le moteur.

Michael Younkin
la source
1
Ce n'est plus précis et devrait être mis à jour ou supprimé.
MichaelHouse
@ Byte56 Merci. À l'avenir, vous devriez pouvoir mettre à jour vous-même d'anciennes publications sans avoir à laisser de commentaire.
Michael Younkin
Je répondais à un drapeau pour supprimer cette réponse et je ne vous proposais pas de le mettre à jour pour indiquer qu'elle n'est plus exacte. Je vous proposais de le mettre à jour pour qu'il soit précis ou de le supprimer. Cette réponse ne répond pas actuellement aux avantages et aux inconvénients d'Unity 3D en tant que choix. Je suis sûr que vous pouvez trouver un moyen de le sauver cependant. (Vous pouvez le mettre à jour pour inclure toutes les fonctionnalités fournies par Unity et celles qu’elles ne proposent pas gratuitement).
MichaelHouse
3

La réponse de Nevermind couvre les choses assez complètement, mais juste ajouter du côté du contrôle de source, ce n'est pas si terrible une fois que vous apprenez à vous méfier des quelques pièges:

  • Tout d’abord, oui, Asset Server est coûteux et assez horrible pour toutes les utilisations, sauf une utilisation de base. Son principal avantage est d'être intégré à Unity, et bien que ce soit un outil précieux pour la facilité d'utilisation et la valeur de projets simples, il n'est pas suffisamment flexible pour les projets plus importants (qui sont généralement des projets dotés d'un budget pour AS).
  • Pour passer au contrôle de version externe, il est important de comprendre que les méta-fichiers doivent être traités comme tout autre actif et toujours ajoutés / mis à jour dans le contrôle de version. Ne pas le faire est probablement ce qui s'est passé dans le scénario de Nevermind consistant à disparaître.
  • Enfin, en travaillant avec tout système de contrôle de version dans Unity (y compris Asset Server), la communication en équipe devient essentielle lorsque vous travaillez avec des actifs binaires pour éviter de piétiner le travail des autres.

Au cas où vous voudriez avoir plus de détails sur ces points, j’ai récemment publié un article sur l’utilisation de git avec Unity sur la base de mon expérience de projets assez importants: http://goo.gl/ivJVR

FlintZA
la source
Ok, wow, excusez la nécropole. Je viens de remarquer que cela a été demandé (et répondu) en 2011! J'ai ajouté à cela parce qu'il est apparu dans la lettre de nouvelles de stackexchange gamedev cette semaine .
FlintZA
Rien de tel que "necro" sur SE. Exemple, mon commentaire. : P
Cypher
2

Réellement. Le mode multijoueur est pris en charge. Il suffit simplement de choisir un serveur sur lequel vous voulez exécuter votre jeu.

Le plus populaire actuellement sur le marché est "SmartFox Server". Ils proposent différents packages, qui sont tous gratuits (dans une certaine mesure). Ce n'est gratuit que si vous prévoyez avoir un certain nombre de joueurs, car chaque package permet à un certain nombre de joueurs de jouer "gratuitement".

Si vous choisissez de mettre à niveau, le prix est assez élevé pour un développeur indépendant. Alors ... À long terme, si vous avez beaucoup de joueurs sur votre serveur, vous devrez payer pour votre jeu plutôt que de le télécharger sur des sites comme Download.com en tant que jeu complet gratuit. Ce n'est peut-être pas un problème pour certains, mais la plupart d'entre nous ne peuvent pas se permettre de débourser 2 500 USD pour un serveur.

Par exemple - SmartFox pro autorise 20 joueurs gratuitement. Si vous souhaitez effectuer une mise à niveau, cela vous coûtera 500 euros, ce qui représente un peu plus aux États-Unis, environ 600-700 euros, ce qui permet 100 connexions.

La prochaine mise à niveau concerne un nombre maximal de 500 joueurs, soit 1000 euros, mais ... vous n’avez pas à payer les 1000, vous payez la différence.

Vous ne devrez donc payer que 500 euros de plus, au lieu de 1000. Les dernières mises à niveau prennent en charge un nombre illimité de connexions, pour 2 000 euros. Ce qui représente près de 3 000 $ US.

Ainsi, si vous effectuez une mise à niveau à partir de 500 connexions, vous payez 1 000 euros. Si vous effectuez une mise à niveau à partir de 100 connexions, vous payez 1 000 euros et, bien sûr, 2 000 euros pour une mise à niveau gratuite.

En outre, ce serveur est très facile à installer avec Unity et il existe de nombreux tutoriels vidéo expliquant comment le faire exactement sur Youtube.

Ambo100
la source
J'ai beaucoup travaillé avec SmartFox Server depuis 2005, et le temps passe très vite. Très stable et mature.
PippoApps.com