2015-04-27 4 views
29

NOTA: Sto trasmettendo una rete più ampia di Unity Answers, la mia domanda originale può essere trovata here.Come evitare due file nella vista del progetto durante la creazione di un importatore personalizzato in Unity3D?

Ho creato un importatore ProTools CueSheet. Utilizza OnPostprocessAllAssets() per rilevare un file nel progetto che ha un'estensione .cuesheet. Quindi esegue quei file di spartito con il mio parser. Questo genera un oggetto ScriptableObject che viene quindi trasformato in un asset tramite Database.CreateAsset().

Il problema è che questo mi lascia con due file, il foglio di calcolo originale e la risorsa appena generata. C'è un modo in cui posso generare la risorsa in modo che il foglio di lavoro originale agisca come una risorsa, allo stesso modo delle trame o dei file FBX?

public class CueSheetPostProcessor : AssetPostprocessor { 
    static string extension = ".cuesheet"; 

    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { 
     foreach (string assetPath in importedAssets) { 
      if (assetPath.EndsWith(extension, StringComparison.OrdinalIgnoreCase)) { 
       string newPath = assetPath + ".asset"; 
       Session session = CueImporter.Load(assetPath); 
       AssetDatabase.CreateAsset(session, newPath); 
       AssetDatabase.SaveAssets(); 
      } 
     } 
    } 
} 
+0

Sospetto che ciò non sia possibile, ma non ne sono sicuro al 99%. Avere due file in una volta può essere scomodo, ma ci sono grossi inconvenienti? –

+4

@golergka Confonde ciò che è un bene e cos'è un file sorgente. Un sacco di tipi di base come FBX, WAV, MP3, ecc. Sono tutti convertiti sul posto. Ad esempio, non c'è una risorsa accanto a un FBX. C'è una documentazione molto leggera su questi essere chiamati "rappresentazioni". Sto cercando di determinare se questo è possibile con formati personalizzati, ma non posso giustificare il download di centinaia di dollari di importatori su Unity Asset Store per scavare attraverso la loro fonte solo per scoprirlo. – Soviut

+2

Quando Unity importa Attività, crea il file che effettivamente utilizza nella cartella Libreria sotto il progetto. Se dai un'occhiata ai file .meta che appartengono ad esempio ad un WAV (impostalo in testo nelle impostazioni del progetto se viene mostrato in binario), troverai un guid lì e troverai un file chiamato come guid in la cartella Libreria. Forse puoi fare lo stesso con il tuo importatore? – itchee

risposta

1

Vorrei creare un PropertyDrawer per la Serializable classe CueSheet tale che accetta la .cueSheet TextAsset o percorso del file .cueSheet e creare un'istanza della classe CueSheet e assegnare o modificarlo.

+0

Sembra promettente. Ci sono riferimenti che potresti raccomandare per questo? – Soviut

+1

@Soviut Prova questo talk, https://www.youtube.com/watch?v=s1o0gZwJS-4 –

+0

Ho esaminato questo ed è davvero solo un miglioramento dell'ispettore. È in realtà in che modo Unity gestisce l'importazione di file FBX, audio e texture? – Soviut

0

Invece di creare una nuova risorsa, hai provato a utilizzare AssetDatabase.AddObjectToAsset? Un file in Risorse può "contenere" più risorse e più tipi di risorse. Quando si importa un file .fbx, l'output nell'ispettore del progetto è composto da diverse cose: un albero GameObject (ad esempio, un prefabbricato), alcuni modelli, forse un rig e così via. Tutti questi sono "contenuti" nel file .fbx elaborato