Hello,
I’m trying to translate the code written here (the bottom thread has the full code): Substance ProceduralMaterial to Material? Possible? - Unity Engine - Unity Discussions
I’ve gotten to one part and got stuck, and I’m not sure exactly how to go about fixing it. The lines below I’m unsure how to translate. Anyone know how? Thanks!!
System.Type substanceImporterType = typeof( SubstanceImporter );
MethodInfo exportBitmaps = substanceImporterType.GetMethod( "ExportBitmaps", BindingFlags.Instance | BindingFlags.NonPublic );
foreach ( ProceduralMaterial substanceMaterial in substanceMaterials ) {
exportBitmaps.Invoke( substanceImporter, new object[] { substanceMaterial } );
}
And my code, including where I’m stuck @ the bottom. Lines 28/29 are probably wrong.
@MenuItem ("Window/Save Texture %#t")
static function SaveTexture () {
print (Selection.activeObject.GetType());
if (Selection.activeObject.GetType() == UnityEditor.SubstanceArchive)
{
var substance : SubstanceArchive = Selection.activeObject as SubstanceArchive;
print ("substance: " + substance.name);
var substancePath : String = AssetDatabase.GetAssetPath( substance.GetInstanceID() );
print ("substancePath: " + substancePath);
var substanceImporter : SubstanceImporter = AssetImporter.GetAtPath( substancePath ) as SubstanceImporter;
var substanceMaterialCount : int = substanceImporter.GetMaterialCount();
print ("substanceMaterialCount: " + substanceMaterialCount);
var substanceMaterials : ProceduralMaterial[] = substanceImporter.GetMaterials();
print ("substanceMaterials.Length: " + substanceMaterials.Length);
var basePath : String = substancePath.Replace( "/" + substance.name + ".sbsar", "" );
print ("basePath: " + basePath);
var characters : String = "0123456789abcdefghijklmnopqrstuvwxABCDEFGHIJKLMNOPQRSTUVWXYZ";
var code : String = "";
var codeLength : int = 8;
for (var i : int = 0; i < codeLength; i++) {
var a : int = Random.Range(0, characters.Length);
code = code + characters[a];
}
print ("code: " + code);
AssetDatabase.CreateFolder( basePath, substance.name + "_" + code );
AssetDatabase.ImportAsset( basePath + "/" + substance.name + "_" + code);
var substanceImporterType : System.Type = typeof( SubstanceImporter );
var exportBitmaps = substanceImporterType.GetMethod( "ExportBitmaps");
for (var s : int = 0; s < substanceMaterials.Length; s++) {
var substanceMaterial = substanceMaterials[s];
var generateAllOutputs : boolean = substanceImporter.GetGenerateAllOutputs(substanceMaterial);
var materialPath : String = basePath + "/" + substance.name + "_" + code + "/";
var newMaterial : Material = new Material(substanceMaterial.shader);
AssetDatabase.CreateAsset( newMaterial, materialPath + substanceMaterial.name + ".mat" );
AssetDatabase.ImportAsset( materialPath + substanceMaterial.name + ".mat" );
newMaterial.CopyPropertiesFromMaterial(substanceMaterial);
substanceImporter.SetGenerateAllOutputs(substanceMaterial, true);
// exportBitmaps.Invoke( substanceImporter);
if (!generateAllOutputs)
substanceImporter.SetGenerateAllOutputs(substanceMaterial, false);
}
}
}