Comment puis-je créer un jeu dans Unity avec un minimum / pas d'utilisation de l'éditeur visuel?

24

Je voudrais écrire un jeu complètement en C #. Dans ma recherche d'un moteur, j'ai trouvé Unity3D, mais tous les didacticiels et la documentation parlent d'un éditeur visuel et de l'IDE Unity dans lequel vous cliquez et pointez pour créer des scènes et des scripts.

Je ne veux pas faire ça. Je préfère une couverture de code complète aux concepteurs qui résument les choses loin de moi. Je voudrais seulement écrire du code C # pur à partir de zéro ou si nécessaire les scripts Unity en complément. Je n'ai trouvé aucune explication ou documentation à ce sujet; comment puis-je créer un jeu en utilisant Unity et en faisant un usage minimum (ou non) de l'éditeur visuel?

Rayon
la source
1
Voter pour clore, il s'agit d'une recommandation-cadre déguisée en question sur Unity.
BlueRaja - Danny Pflughoeft
2
Je ne sais pas vraiment si je suis d'accord avec cela, même si je ne renverserais pas un vote serré de la communauté. Cependant, je noterai que cette question concerne spécifiquement certaines capacités d'Unity: les réponses qui ne répondent pas peuvent être supprimées. Ne transformons pas cela en une question hors sujet si nous n'avons pas à le faire, d'accord?
Josh
2
La plupart des développeurs recherchent un éditeur visuel à un moment donné pour concevoir leurs niveaux, car le positionnement visuel des choses est tellement plus simple que de définir la position de chaque petit doodad dans le code. Il en va de même pour l'édition / la conception de dispositions GUI. Avoir ces trucs déjà intégrés est un énorme avantage à mon humble avis.
bummzack
4
I prefer writing my own level editor which provides only the stuff really neccessary for my gameok, cela signifie essentiellement que vous ne voulez pas utiliser un moteur de jeu, vous voulez programmer avec une bibliothèque graphique. Cependant, vous avez déjà rencontré un problème technique lorsque vous essayez de le faire, alors ... je sens une contradiction ici.
jhocking
3
@jhocking Ensuite, notre définition du moteur de jeu semble être très différente. Une bibliothèque de classes est un moteur de jeu si elle résume des tâches de jeu typiques comme les mathématiques de la caméra, un système audio et peut-être même un peu de physique, mais un concepteur n'est pas une exigence et à mon avis ne devrait même pas être un must-use .
Ray

Réponses:

27

Je suis un débutant complet dans Unity, mais voici comment je le fais en ce moment, et cela réduit l'utilisation de l'éditeur au minimum:

Dans l'éditeur, je n'ai que trois objets: un GameObject vide appelé "principal", une caméra et une lumière. Et c'est uniquement parce que jusqu'à présent je ne travaille qu'avec une seule caméra et une seule lumière, donc c'était plus rapide de cette façon. Plus tard, je les supprimerai probablement, et seul le "principal" restera.

Dans "Assets / MyScripts", j'ai une classe "Main", qui est ajoutée au GameObject "principal" en tant que comportement. Ce qui signifie que lorsque le programme démarre, la classe "Main" est instanciée et sa méthode est appelée. La classe "principale" est comme ceci:

using UnityEngine;

public class Main : MonoBehaviour
{

    void Start ()
    {
        // initialize the game
    }

    void Update ()
    {
        // update physics
    }

}

Dans le jeu, je crée dynamiquement l'environnement comme ceci:

GameObject floor = GameObject.CreatePrimitive (PrimitiveType.Cube);
floor.renderer.material.color = RandomGreen ();

Mais c'est parce que jusqu'à présent je ne fais qu'un prototype. Plus tard, je voudrai remplacer les cubes par de belles choses éditées dans Blender. Ce qui nécessitera de les faire dans Blender et de les importer dans les unités en tant que "prefabs". Ensuite, je vais instancier de la même manière les "prefabs" du code C #.

Si vous souhaitez faire réagir un objet aux événements, tels que les collisions avec d'autres objets, vous pouvez instancier l'objet et leur ajouter dynamiquement une classe de comportement, qui est une classe C # dérivée de MonoBehavior. Par exemple, si vous voulez avoir une voiture, vous faites un préfabriqué de voiture et écrivez une classe "CarBehavior" pour son comportement dans le jeu.

De cette façon, vous pouvez réduire l'interaction avec l'éditeur au minimum, mais probablement pas complètement à zéro. Maintenant, cela dépend si c'est une solution acceptable pour vous.

Viliam Búr
la source
2
Je dirais que cela ressemble à une réponse assez claire et solide pour juste un débutant Unity :)
Ray
Merci! Je suis un programmeur expérimenté sinon, mais c'est mon premier projet dans Unity et il est loin d'être terminé. Je n'ai pas encore utilisé de préfabriqués. Il peut y avoir des complications que je ne connais pas actuellement, donc je recommande de suivre mes conseils avec un grain de sel. Soit dit en passant, la sérialisation dans Unity me semble un peu contre-intuitive. Je vais devoir l'étudier plus en profondeur et cela peut influencer certaines décisions de conception.
Viliam Búr
9

Lorsque vous travaillez avec Unity, vous devez effectuer certains travaux dans l'éditeur d'Unity; c'est simplement ainsi que fonctionne Unity.

Cependant, la grande majorité de ce que vous feriez en tant que programmeur ne se produit pas dans l'éditeur d'Unity; les fichiers de script sont des fichiers texte externes écrits dans un IDE externe, et en tant que programmeur, vous utilisez uniquement l'éditeur d'Unity pour lier les scripts à exécuter, puis appuyer sur Play pour exécuter réellement le jeu. Ce n'est pas différent de lier des classes dans les paramètres du projet, puis d'appuyer sur Exécuter dans votre IDE.

La plupart des autres outils de développement de jeux dotés d'un éditeur visuel central sont également associés à un support de script limité et rigide, mais Unity ne souffre pas de cet inconvénient. Bien que tout ce qui a été créé pour Unity passe finalement par l'éditeur visuel, cette interface principale implique beaucoup de liens entre les projets et le code personnalisé qui s'exécute dans le moteur de jeu d'Unity. Programmeurs expérimentés, ne négligez pas cet environnement de développement, le confondant avec un créateur de jeu avec une capacité de programmation limitée!

(aussi, il semble que le livre que j'écris actuellement serait une excellente ressource pour vous, car il est destiné aux programmeurs expérimentés)

jhocking
la source
1
était en train de lire votre livre quand je suis tombé sur cette réponse
max pleaner
6

Je crois que ce que vous cherchez, c'est le Futile Framework for Unity.

Fondamentalement, vous pouvez ensuite faire toute votre programmation en utilisant des scripts sans avoir à "glisser-déposer" ou à jouer avec l'éditeur visuel. Tout ce dont vous avez besoin est un seul GameObject dans votre scène qui sera le conteneur de votre jeu entier. Vous faites ensuite tout de manière procédurale comme vous le feriez avec un éditeur non visuel.

Avertissement: Bien que Futile soit très centré sur le code, il est inévitable que vous deviez jouer avec l'éditeur Unity d'une manière ou d'une autre. Mais cela est très réduit avec Futile.

midasmax
la source
2

Je voudrais ajouter à toutes les bonnes réponses ici, en particulier la réponse de @jhocking:

Presque tout ce que j'ai trouvé dans Unity a une contrepartie en texte brut dans l'arborescence des dossiers de projets. J'ai directement édité des prefabs et d'autres gameObjects sans ouvrir Unity, et ces changements ont été trouvés avec succès par d'autres développeurs lors de la validation.

Bien que je ne connaissais pas autant le Futile Framework jusqu'à aujourd'hui, cela semble être un moyen vraiment génial de tout faire.

J'utilise actuellement toutes les fonctionnalités de glisser-déposer au lieu de me baser sur des scripts, mais cela devra changer car mon objectif aura des niveaux générés de manière procédurale et des méchants.

Mes deux cents disent essentiellement obtenir les quelques objets dont vous avez besoin dans Unity, puis s'appuyer sur des scripts dans un éditeur externe. Vous pouvez presque tout faire en texte brut.

vulpineblazeyt
la source