Jump to content
Unity Insider Forum

Avatare in Laufzeit laden


RLe

Recommended Posts

Hallo, liebe Community,

ich versuche die ganze gerade, einen 3d-Avatar in Laufzeit zu laden, aber es will einfach nicht hinauen. Mein Code:

 Resources.Load("3D_Objects/Finja_retopology_head_test");

habe auch schon versucht:

 Resources.Load("3D_Objects/Finja_retopology_head_test.obj");

Gleichmal: Mein Script wird in Unity aufgerufen. Dessen habe ich mich extra vergewissert.

Nun hatte ich die Dokumention in Unity so verstanden, als müsste man alles in einen Ordner namens "Resources" machen, also wie der Quelltext hier: https://docs.unity3d.com/ScriptReference/Resources.Load.html?_ga=2.65254446.1037845241.1577054905-35281293.1572903849

Damit habe ich es dann auch versucht - nichts. Und auch keine Error-Message bei Unity, einfach gar nichts. Habe es auch so versucht:

var finja = Resources.Load("3D_Objects/Finja_retopology_head_test");

Wenn ich es einfach so einfüge, klappts ohne Probleme, aber das ist ja nicht mein Ziel.

Nehmts mir nicht übel, aber mich regt das einfach auf, wenn sowas einfaches nirgends richtig steht, ich habs ja schon gesucht, finde aber nichts, wie läd man ein 3d-Objekt mit C#?

P. S.: Ich sehe, dass die in Unity mit <T> arbeiten. Aber daran kann es meines Wissens nach nicht liegen, oder? Ich schwöre, dass ich bei Google zwar Sachen finde, aber nicht das, was ich suche, ehrlich.

 

Edit: Gelöst. Entschuldigung, falls ich etwas unhöflich rüber gekommen bin, ich hatte nicht gesehen, dass es nicht reicht, es einfach nur laden zu lassen. Hier mein Lösungsweg, für andere Einsteiger:

\\Ordner "3D_Objects" in einem Ordner namens "Resources"
        var finja = Resources.Load("3D_Objects/Finja_retopology_head_test");
        Instantiate(finja, new Vector3(0, 0, 0), Quaternion.identity);

Funktioniert super!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Resource.Load kann nur Unity bekannte Types laden. .obj oder .fbx bzw models allgemein sind das nicht.

Daher mache zu erst daraus ein Prefab und danach kannst du es Laden.

EDIT: Muss mich korrigieren. Hab da mist gelabert, weil ich dich falsch verstanden habe.
Ein Obj kannst mit Resources laden, wenn du ein Resources Ordner und da rein packst. Danach kannst du so laden

GameObject 3dmodelResource = Resource.Load<GameObject>("3dmodel);
Instantiate(3dmodelResource);

Du muss also angeben, was du lädts, gameobject, mesh, texture usw.
Den Pfad gibst du ohne "Resources" an. Also wenn es im Resources/mymodels/avatar.obj ist dann einfach mymodels/avatar eingeben.

Ich empfehle das dir aber NICHT! Weil man da auf Speicherprobleme kommen kann. Also mehr Ramspeicher wird benutzt. 

Es ist besser wenn du aus deinen 3d models einen Prefab machst und dann in deinem Script eine List bzw Array zu machen, und da kannst du all deine Prefabs reinpacken und von da aus laden.

Instantiate(mymodels[0]);

Das hast du dann nämlich auch im Laufzeit erstellt :)

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 18 Stunden schrieb MaZy:

Resource.Load kann nur Unity bekannte Types laden. .obj oder .fbx bzw models allgemein sind das nicht.

Daher mache zu erst daraus ein Prefab und danach kannst du es Laden.

EDIT: Muss mich korrigieren. Hab da mist gelabert, weil ich dich falsch verstanden habe.
Ein Obj kannst mit Resources laden, wenn du ein Resources Ordner und da rein packst. Danach kannst du so laden


GameObject 3dmodelResource = Resource.Load<GameObject>("3dmodel);
Instantiate(3dmodelResource);

Du muss also angeben, was du lädts, gameobject, mesh, texture usw.
Den Pfad gibst du ohne "Resources" an. Also wenn es im Resources/mymodels/avatar.obj ist dann einfach mymodels/avatar eingeben.

Ich empfehle das dir aber NICHT! Weil man da auf Speicherprobleme kommen kann. Also mehr Ramspeicher wird benutzt. 

Es ist besser wenn du aus deinen 3d models einen Prefab machst und dann in deinem Script eine List bzw Array zu machen, und da kannst du all deine Prefabs reinpacken und von da aus laden.


Instantiate(mymodels[0]);

Das hast du dann nämlich auch im Laufzeit erstellt :)

 

Ich weiß, is ja auch gelöst. Trotzdem danke für deine Hilfe. Trotzdem muss ich natürlich sagen, dass die Scripting API was das angeht meiner Meinung nach ruhig noch etwas verbessert werden könnte, da es ein bisschen gedauert hat, bis ich es raus hatte.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...