Jump to content
Unity Insider Forum

Postprocessor - FBX, Sound - Import


Recommended Posts

Für die, die es nervt FBX nach dem Import noch von hand skalieren zu müssen:

using UnityEditor;
/// <summary>
/// put this script into a directory named "Editor"
/// </summary>
internal class Postprocessor : AssetPostprocessor
{
   /// <summary>
   /// set the scale of all newly imported fbx to a scale of 1.0
   /// </summary>
   private void OnPreprocessModel()
   {
       var modelImporter = assetImporter as ModelImporter;
       if (modelImporter == null) return;
       if (!modelImporter.userData.Equals("")) return;
       modelImporter.globalScale = 1f;
       modelImporter.userData = "ImportedOnce";
   }
   /// <summary>
   /// asks for importing audio data as 2d or 3d sound
   /// </summary>
   private void OnPreprocessAudio()
   {
       var audioImporter = assetImporter as AudioImporter;
       if (!audioImporter) return;
       audioImporter.threeD = EditorUtility.DisplayDialog("Importing sound: " + audioImporter.name, "Import as 2D or 3D sound?", "3D", "2D");
   }
}

 

 

Nichts großes, aber recht nützlich. ;)

Das muss natürlich in den Editor Ordner.

 

Edit: Sascha´s Audiozeug dazugepackt ;)

 

Nutzung auf eigene Gefahr ;)

bearbeitet von AgentCodeMonkey
Link zu diesem Kommentar
Auf anderen Seiten teilen

Oh, den AssetPostprocessor hab ich ja noch gar nicht gesehen... ist ja stark!

 

Hier noch mein Zusatz (das hat mich schon immer gewurmt!):

   void OnPreprocessAudio()
   {
       var audioImporter = assetImporter as AudioImporter;
       if(audioImporter)
       {
           audioImporter.threeD = EditorUtility.DisplayDialog("Sound Import", "Import as 2D or 3D sound?", "3D", "2D");
       }
   }

...damit lange mp3s für Musik nicht immer als 3D Sound importiert werden :D

 

Einzige Optimierung an deinem Snippet: "!= null" kann man inzwischen auch in C# bei allen vom Unity-Objekt erbenden Klassen weg lassen, da wird implizit mit != null auf bool gecastet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Ich habe gerade festgestellt, dass man unbedingt noch eine Abfrage haben will, ob wirklich mit Grße 1 importiert werden soll - sonst kann man die Größe nachträglich nicht mehr per Hand ändern :D

 

//e: Mein Vorschlag:

   void OnPreprocessModel()
   {
 var modelImporter = assetImporter as ModelImporter;
 if(modelImporter != null)
    {
	    if(modelImporter.userData.Equals(""))
	    {
		    modelImporter.globalScale = 1f;
		    modelImporter.userData = "ImportedOnce";
	    }
    }
   }

bearbeitet von Sascha
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Kurze Frage bzgl. dem Scale an sich: In 3DS Max habe ich als Unit-Setup "Metric" eingestellt und unter System-Unit-Scale "1 Unit = 1,0 Centimeters".

 

In Unity ist ja eine Längeneinheit = 1 Meter. Wenn ich nun das Modell aus 3DS Max nach Unity importe wird es kleiner gemacht.

 

Also gehe ich in Unity in den Importer rein und stelle den Scale des Modells auf Faktor 1.0 statt 0.01.

Damit sieht es schon besser aus. Was mich aber irritiert ist die Tatsache, dass bei dem Inspector bei dem Scale (X Y Z) immer noch die Werte 0.01 stehen. Sollte doch eigentlich 1.0 sein, oder irre ich mich?

 

Weil, wenn ich im Importer den Scale auf 1.0 stelle und im Inspector dann die drei Einzelwerte ebenfalls auf 1.0 stelle, dann ist mein Modell größer, als ich überhaupt zoomen kann.

 

Schritt 1: Unit System Setup

post-2515-0-07206100-1362769317_thumb.jpg

Schritt 2: Export Settings

post-2515-0-29784500-1362769315_thumb.jpg

Ergebnisse:

post-2515-0-49686000-1362769307_thumb.jpgpost-2515-0-55676300-1362769310_thumb.jpgpost-2515-0-96801600-1362769312_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also bin ja schon x Jahre MaxUser und ich arbeite eig in Meter, nicht in Zentimeter und habe anschließend kein Problem bei den Skalierungen. :) Ich bin generell ja faul was das Einstellen dieser Parameter angeht (und dann noch das lästige Merken ...^^) Generall aber auch, weil (wir hatten das mit den Teams ja schon...) das in Teams oft daneben gegangen ist... und richtig ätzend, wenn jemand schon geriggt und animiert hat... in den falschen Skalierungen.

Und deshalb hab quasi ne Dummy Datei, aus der ich arbeite... Wir können uns da gerne außerhalb des Forums mal kurzschließen.

Was aber auch sein kann, dass du mal in Max ResetXForm nutzen solltest, nachdem du das Model fertig hast oder in Unity reinschmeißen willst, denn die Skalierungen werden anschließend von Unity übernommen und das geht oft voll danaben...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe gerade versucht alles zu rescalen ... omg ... hat mir alles zerfetzt. :D Habe mit 3DS Max & Co. nur Basicerfahrungen. Ich habe bei den Tools die Rescalefunktion benutzt. Das meiste schien okay, aber bei der Treppe wurden dann die Polygone völlig verrückt neu geordnet. Andere wurden auf eigenartige Weise rotiert und bewegt. Der Pivotpunkt war dann nicht mehr in der Mitte der Objekte, sondern im Zentrum der Map. Ich versuch es noch einmal ... mal sehen was rauskommt.

 

EDIT:

Habe das Problem nun gelöst. Habe einfach bei "Metric" nun "Centimeters" statt "Meters" eingestellt. Dadurch stimmt mein System Unit und das der File überein. In Unity wird nun bei Scale korrekt 1.0 angezeigt und das Objekt ist gleich dem Referenzwürfel.

post-2515-0-07206100-1362769317_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...