Jump to content
Unity Insider Forum

Platzieren einer Collada (.dae) in Unity via Script


Silas3748

Recommended Posts

Hallo zusammen!

Ich suche nach einer Möglichkeit 3D-Modelle in Form einer Collada Datei via Skript einzufügen.

Vorab: Ich Code erst seit ein paar Wochen in C# deshalb bitte ich euch um eure Hilfe damit ich es für die Zukunft besser weiß :)

Also:

1. Es liegt eine .dae Datei vor

2. Mit Click auf den Start Button soll das Skript automatisch diese Datei in die Welt einfügen (Aktivierung mit: [RuntimeInitializeOnLoadMethod])

 

Wie man das Objekt dann transformiert etc. weiß ich wieder, bloß ich zerbreche mir seit Stunden den Kopf und durchforste das komplette Internet und komme nicht weiter.

 

Ich hoffe ihr könnt mir helfen, oder zumindest einen Denkanstoß geben :)

 

Beste Grüße Silas😥

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

Unity hat zur Laufzeit keinen Importer dafür. Der Editor kann das, Builds aber nicht. Man kann natürlich alles programmieren, und entsprechend gab es auch schon Pakete, die das können. Das Ding scheint aber z.B. veraltet und eingestellt zu sein. Der Asset Store-Link ist jedenfalls tot.

Da der Editor das aber kann, besteht immer die Möglichkeit, das Modell im Editor zu laden und dann z.B. ein ASsetBundle zu bauen. Aber das ergibt auch nicht in allen Situationen Sinn. Daher... warum hast du ausgerechnet ausschließlich .dae-Dateien vorliegen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erst einmal vielen Dank für die schnelle Antwort!

Ich dachte, dass .dae Dateien die Schnittstelle zwischen Blender und Unity darstellen. Also dachte ich bisher😅

Im Prinzip kann ich auch jedes Datei Format welches Blender zum exportieren angibt als Datei benutzen. (siehe Bild)

Das ganze soll möglichst ohne "manuelle" Bedienung ablaufen sondern halt automatisiert. 

Mit einem einfachen 

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);

habe ich es schon geschafft, jedoch ist das mit den externen Dateien eine andere Nummer 😕 :) 

Unbenannt.JPG

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Minuten schrieb Silas3748:

Ich dachte, dass .dae Dateien die Schnittstelle zwischen Blender und Unity darstellen. Also dachte ich bisher😅

Kein Stück :D

Unity benutzt intern FBX. Der Editor kann eine Vielzahl von Formaten entweder selber lesen oder kennt das richtige Programm, um es konvertieren zu lassen. Findet Unity z.B. eine .blend-Datei, dann geht es zu Blender und lässt es sich in FBX umwandeln.

Zur Laufzeit hat Unity exakt gar nichts eingebaut, um 3D-Modelle zu laden. Wenn das Eingangsformat egal ist, ist es am einfachsten, OBJ zu nutzen. Das ist so strunzsimpel, da kann man sich den Importer in ner halben Stunde selber schreiben. Gibt aber (deswegen) auch eine Vielzahl an verfügbaren OBJ-Importern.

Wenn dir das Format aber egal ist, wirft das die Frage auf: Musst du die Modelle wirklich zur Laufzeit laden?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Korrigiere mich bitte, wenn ich falsch liege:)

 

Tatsächlich dreht es sich bei meinem kleinen Projekt darum, dass alles, mit einem simplen klick auf den Start Button, funktioniert.

Es geht eher um eine automatische 3D Visualisierung der Objekte/Welt, als um ein Spiel o.Ä. :)

Also würdest du mir empfehlen OBJ  zu benutzen? :) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wann wie was angezeigt wird, ist egal. Die Frage ist: Muss dein Programm in der Lage sein, beliebige 3D-Modell-Dateien von der Festplatte des Rechners zu laden, auf dem es läuft? Oder würde es auch einfach reichen, dass die Modelle in den Editor gezogen werden und dann von Unity mit in den Build gepackt werden?

Oder anders gefragt: Soll der Benutzer deines Programms auf eigene Faust beliebige Modelle in das "Spiel" laden können?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist nicht meine Fraaaaage xD
(Edit: Du schaffst es immer, meine Frage so zu beantworten, dass ich mir nicht ganz sicher sein kann, was du meinst :D)

Du hast doch einen, der dein Programm benutzen soll, richtig? Der heißt jetzt Otto. Otto startet das Programm, das du mit Unity gebaut hast. Dann sieht er ein oder mehrere 3D-Modelle auf seinem Bildschirm. Aber was sind das für 3D-Modelle? Sind das Modelle, die du ausgesucht hast? Oder sind das 3D-Modelle, die Otto mit Blender selber gebaut hat, um sie in deinem Programm anzeigen zu lassen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ups, ist wohl etwas lang gewesen der Tag heute xD

Nein also die 3D-Modelle liegen zu dem Zeitpunkt wo Unity geöffnet und gestartet wird als fertige Dateien auf der Festplatte vor. Also ich gebe ihm im Skript genau die Dateien vor die er sehen soll.

Der Blender Prozess: 3D-Objekt erstellen und exportieren läuft völlig separat und autark ab.

ich hoffe du weißt was ich meine:)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube ich habe das nicht so ganz rüber gebracht was mir in meinem Kopf vorschwebt.

Es existiert eine Datei: Objekt1.obj  in C://Daten/

Das einzige was Otto tut ist auf Play zu drücken.

Dann soll ein Skript ablaufen welches sich die Datei Objekt1.obj von C://Daten/ holt, in die Welt einfügt und mit der transform Funktion auf eine gewisse Stelle setzt.

 

Also das einzige was auf der Benutzeroberfläche von Unity gemacht werden soll ist auf Pöay zu drücken

😅:)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist doch mal eine relevante Information ;) 

Man kann hier zwischen drei Zuständen unterscheiden: Editing, Play Mode und Build.

  • Editing bedeutet, dass im Editor normale Dinge passieren. Assets werden importiert, Editorfenster werden angezeigt usw.
  • Einen Build hast du, wenn du dein Projekt gebaut hast und dein "Spiel" kompilierst. Der Editor ist in diesem Kontext weg, und alle seine Funktionalitäten mit ihm.
  • Play Mode bedeutet, dass du das Spiel laufen hast. Aber da du immer noch im Editor bist, hast du Zugriff auf seine Funktionalität.

Du bist hier im Play Mode. Du baust also quasi normalen Spielcode, kannst aber Code aus UnityEditor.dll benutzen.

Eine Variante wäre, dass du die Modell-Dateien in den Assets-Ordner des im Editor geöffneten Projekts kopierst. Dann könnte Unity die automatisch importieren und unterstützt von Haus aus sehr viele Formate. Allerdings hast du dann das Projekt abgeändert. Ich habe das Gefühl, du möchtest das Projekt nach dem Play Mode wieder so haben wie vor dem Play Mode. In dem Fall, und wenn es wirklich kein Problem ist, den Blender-Nutzer (also Otto) zu einem bestimmten Dateiformat zu zwingen, würde ich in der Tat einen OBJ-Importer benutzen. Wenn du kompatibler sein willst, kannst du mal im Asset Store gucken. Aber OBJ ist so simpel, dass es da im Netz haufenweise kostenloses gibt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...