Wie kann ich ein Spiel in Unity mit minimaler / keiner Verwendung des visuellen Editors erstellen?

24

Ich möchte ein Spiel komplett in C # schreiben. Auf meiner Suche nach einer Engine habe ich Unity3D gefunden, aber in allen Tutorials und Dokumentationen geht es um einen visuellen Editor und die Unity-IDE, in der Sie klicken und herumzeigen, um Szenen und Skripte zu erstellen.

Ich will das nicht machen. Ich bevorzuge die vollständige Codeabdeckung gegenüber Designern, die Dinge von mir weg abstrahieren. Ich möchte nur reinen C # -Code von Grund auf schreiben oder bei Bedarf die Unity-Skripte als Ergänzung. Ich konnte keine Erklärung oder Dokumentation dazu finden. Wie kann ich mit Unity ein Spiel erstellen und den visuellen Editor nur minimal (oder gar nicht) verwenden?

Strahl
quelle
1
Zum Abschluss ist dies eine Rahmenempfehlung, die als Frage nach der Einheit getarnt ist.
BlueRaja - Danny Pflughoeft
2
Ich bin mir nicht sicher, ob ich damit einverstanden bin, obwohl ich eine Community-enge Abstimmung nicht verwerfen würde. Ich werde jedoch bemerken, dass diese Frage sich speziell auf einige Funktionen von Unity bezieht: Antworten, die sich nicht mit möglicherweise entfernten Themen befassen. Lassen Sie sich nicht das wiederum in eine Off - Topic Frage , wenn wir nicht haben, okay?
Josh
2
Die meisten Entwickler suchen irgendwann nach einem visuellen Editor, um ihre Ebenen zu gestalten, weil das visuelle Positionieren so viel einfacher ist als das Festlegen der Position jedes kleinen Doodads im Code. Gleiches gilt für das Bearbeiten / Entwerfen von GUI-Layouts. Das Zeug bereits eingebaut zu haben, ist meiner Meinung nach ein großer Vorteil.
Bummzack
4
I prefer writing my own level editor which provides only the stuff really neccessary for my gameOkay, das bedeutet im Grunde, dass Sie keine Spiel-Engine verwenden möchten, sondern mit einer Grafikbibliothek programmieren möchten. Sie haben jedoch bereits einen technischen Haken an der Sache gesetzt, also ... spüre ich hier einen Widerspruch.
jhocking
3
@jhocking Dann scheint unsere Definition der Game Engine ganz anders zu sein. Eine Klassenbibliothek ist eine Spiel-Engine, wenn sie typische Spielaufgaben wie Kameramathematik, ein Soundsystem und vielleicht sogar ein bisschen Physik abstrahiert, aber ein Designer ist keine Voraussetzung und sollte meiner Meinung nach nicht einmal ein Muss sein .
Ray

Antworten:

27

Ich bin ein absoluter Anfänger in Unity, aber so mache ich es im Moment und es reduziert den Editor-Aufwand auf ein Minimum:

Im Editor habe ich nur drei Objekte: Ein leeres GameObject namens "main", eine Kamera und ein Licht. Und das nur, weil ich bisher nur mit einer einzigen Kamera und einem einzigen Licht arbeite, also war es auf diese Weise schneller. Später werde ich sie wahrscheinlich entfernen, und nur das "Haupt" wird übrig bleiben.

In "Assets / MyScripts" habe ich eine Klasse "Main", die dem "main" GameObject als Verhalten hinzugefügt wird. Das heißt, wenn das Programm startet, wird die Klasse "Main" instanziiert und ihre Methode aufgerufen. Die "Main" -Klasse sieht folgendermaßen aus:

using UnityEngine;

public class Main : MonoBehaviour
{

    void Start ()
    {
        // initialize the game
    }

    void Update ()
    {
        // update physics
    }

}

Im Spiel baue ich die Umgebung dynamisch so:

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

Das liegt aber daran, dass ich bisher nur einen Prototypen mache. Später möchte ich die Würfel durch einige nette Dinge ersetzen, die in Blender bearbeitet wurden. Dazu müssen sie in Blender erstellt und als "Prefabs" in Units importiert werden. Dann werde ich auf ähnliche Weise die "Prefabs" aus dem C # -Code instanziieren.

Wenn Sie ein Objekt auf Ereignisse wie Kollisionen mit anderen Objekten reagieren lassen möchten, können Sie das Objekt instanziieren und dynamisch einer Verhaltensklasse hinzufügen, die eine von MonoBehavior abgeleitete C # -Klasse ist. Wenn Sie beispielsweise ein Auto haben möchten, erstellen Sie ein Auto-Fertighaus und schreiben eine "CarBehavior" -Klasse für das Verhalten im Spiel.

Auf diese Weise können Sie die Interaktion mit dem Editor auf ein Minimum reduzieren, wahrscheinlich jedoch nicht vollständig auf Null. Jetzt kommt es darauf an, ob dies für Sie eine akzeptable Lösung ist.

Viliam Búr
quelle
2
Ich würde sagen, dies scheint eine ziemlich klare und solide Antwort für einen Unity-Anfänger zu sein :)
Ray
Vielen Dank! Ansonsten bin ich ein erfahrener Programmierer, aber dies ist mein erstes Projekt in Unity und es ist noch lange nicht fertig. Ich habe noch keine Fertigteile verwendet. Es kann einige Komplikationen geben, die mir derzeit nicht bewusst sind. Daher empfehle ich, meinen Rat mit einem Körnchen Salz zu befolgen. Die Serialisierung in Unity wirkt für mich übrigens etwas kontraintuitiv. Ich muss es genauer untersuchen, und es kann einige Designentscheidungen beeinflussen.
Viliam Búr
9

Wenn Sie mit Unity arbeiten, müssen Sie einige Arbeiten im Unity-Editor ausführen. So funktioniert Unity einfach.

Die überwiegende Mehrheit dessen, was Sie als Programmierer tun würden, geschieht jedoch nicht in Unitys Editor. Bei den Skriptdateien handelt es sich um externe Textdateien, die in einer externen IDE geschrieben wurden. Als Programmierer verwenden Sie nur den Unity-Editor, um zu verknüpfen, welche Skripts ausgeführt werden sollen, und klicken dann auf Play, um das Spiel tatsächlich auszuführen. Das ist nicht anders als das Verknüpfen in Klassen in den Projekteinstellungen und dann Ausführen in Ihrer IDE.

Die meisten anderen Spieleentwicklungs-Tools mit einem zentralen visuellen Editor verfügen ebenfalls über eine eingeschränkte und unflexible Skriptunterstützung, aber Unity hat diesen Nachteil nicht. Obwohl alles, was für Unity erstellt wurde, letztendlich den visuellen Editor durchläuft, beinhaltet diese zentrale Benutzeroberfläche viele Verknüpfungen von Projekten mit benutzerdefiniertem Code, der in der Spiele-Engine von Unity ausgeführt wird. Erfahrene Programmierer, entlassen Sie diese Entwicklungsumgebung nicht und verwechseln Sie sie mit einem zusammenklickbaren Game Creator mit begrenzten Programmiermöglichkeiten!

(Außerdem scheint das Buch, das ich gerade schreibe, eine großartige Ressource für Sie zu sein, da es sich an erfahrene Programmierer richtet.)

jhocking
quelle
1
war gerade dabei, dein buch zu lesen, als ich auf diese
antwort stieß
6

Ich glaube, was Sie suchen, ist der sinnlose Rahmen für die Einheit.

Grundsätzlich können Sie dann Ihre gesamte Programmierung mithilfe von Skripten ausführen, ohne viel mit dem visuellen Editor "ziehen und ablegen" zu müssen. Alles, was Sie brauchen, ist ein einzelnes GameObject in Ihrer Szene, das den Container für Ihr gesamtes Spiel darstellt. Sie erledigen dann alles prozedural wie mit einem nicht-visuellen Editor.

Haftungsausschluss: Obwohl Futile sehr codeorientiert ist, müssen Sie sich in gewisser Weise mit dem Unity-Editor herumschlagen. Mit Futile wird dies jedoch stark reduziert.

Midasmax
quelle
2

Ich möchte hier allen guten Antworten hinzufügen, insbesondere der Antwort von @jhocking:

Fast alles, was ich in Unity gefunden habe, hat ein Gegenstück im Ordnerbaum der Projekte. Ich habe Prefabs und andere GameObjects direkt bearbeitet, ohne Unity zu öffnen, und diese Änderungen wurden von anderen Entwicklern beim Festschreiben erfolgreich gefunden.

Obwohl ich bis heute nicht so viel über das Futile Framework wusste, scheint es eine wirklich großartige Möglichkeit zu sein, an alles heranzukommen.

Momentan verwende ich alle Drag-and-Drop-Funktionen, anstatt mich auf Skripte zu beschränken, aber das muss sich ändern, da mein Ziel prozedural generierte Ebenen und böse Jungs haben wird.

Laut meinen zwei Cent erhalten Sie im Grunde genommen die wenigen Objekte, die Sie in Unity benötigen, und verlassen sich dann auf Skripte in einem externen Editor. Sie können fast alles im Klartext tun.

vulpineblazeyt
quelle