public static void ExportModelTextures() { var rootDestinationDirPath = "TextureExport"; ImportHelpers.EnsureDirectoryExists(rootDestinationDirPath); var relativeModelsDirPath = Path.Combine("Assets", "GameAssets", "Models"); var modelsDir = new DirectoryInfo(relativeModelsDirPath); foreach (var subDir in modelsDir.EnumerateDirectories()) { var texturesDir = subDir.GetDirectories().FirstOrDefault(dir => dir.Name.ToLower() == "textures"); if (texturesDir == null) { continue; } var destinationDir = Path.Combine(rootDestinationDirPath, subDir.Name); ImportHelpers.EnsureDirectoryExists(destinationDir); foreach (var file in texturesDir.GetFiles().Where(file => file.Name.EndsWith(".asset"))) { string relativeAssetPath = Path.Combine(relativeModelsDirPath, subDir.Name, texturesDir.Name, file.Name) .ToAssetPath(); var asset = AssetDatabase.LoadAssetAtPath <Texture2D>(relativeAssetPath); if (asset == null) { continue; } File.WriteAllBytes(Path.Combine(destinationDir, asset.name + ".png"), asset.EncodeToPNG()); } } }
public void ImportModel(PSMDImportManifest.Model modelManifest) { string path = Path.Combine(_manifest.PsmdPkGraphicPath, modelManifest.PsmdModel); var spicaHandle = H3D.Open(File.ReadAllBytes(path)); string targetDir = ImportHelpers.CreateDirectoryForImport(modelManifest.TargetName); string targetTexturesDir = Path.Combine(targetDir, "Textures"); string targetMaterialsDir = Path.Combine(targetDir, "Materials"); string targetMeshesDir = Path.Combine(targetDir, "Meshes"); ImportHelpers.EnsureDirectoryExists(targetTexturesDir); ImportHelpers.EnsureDirectoryExists(targetMaterialsDir); string modelPath = Path.Combine(targetDir, $"{modelManifest.TargetName}.dae"); new DAE(spicaHandle, 0).Save(modelPath); AssetDatabase.ImportAsset(modelPath.ToAssetPath()); var unityTextures = new List <Texture>(); foreach (var spicaTexture in spicaHandle.Textures) { var tempTexture = new Texture2D(spicaTexture.Width, spicaTexture.Height, TextureFormat.RGBA32, false); tempTexture.LoadRawTextureData(spicaTexture.ToRGBA()); var unityTexture = new Texture2D(tempTexture.width, tempTexture.height, TextureFormat.RGBA32, true); unityTexture.SetPixels(tempTexture.GetPixels()); // Workaround to get mipmaps unityTexture.Apply(true); AssetDatabase.CreateAsset(unityTexture, Path.Combine(targetTexturesDir, $"{spicaTexture.Name}.asset").ToAssetPath()); unityTextures.Add(unityTexture); } var modelImporter = AssetImporter.GetAtPath(modelPath.ToAssetPath()) as ModelImporter; if (modelImporter == null) { throw new Exception("Couldn't import model."); } var spicaMaterials = spicaHandle.Models[0].Materials; foreach (var spicaMaterial in spicaMaterials) { var material = CreateMaterial(spicaMaterial, unityTextures); AssetDatabase.CreateAsset(material, Path.Combine(targetMaterialsDir, $"{spicaMaterial.Name}.asset").ToAssetPath()); modelImporter.AddRemap(new AssetImporter.SourceAssetIdentifier(typeof(Material), material.name + "_mat"), material); } modelImporter.SaveAndReimport(); string prefabPath = Path.Combine(targetDir, $"{modelManifest.TargetName}.prefab").ToAssetPath(); ImportHelpers.GeneratePrefabForModel(modelPath, prefabPath, targetMeshesDir); AssetImporter.GetAtPath(prefabPath).assetBundleName = modelManifest.TargetName; }
private void Save() { var fileName = _file.DestinationFile.FullName; if (_file.DestinationFile.Exists) { ((FileInfo)_file.DestinationFile).CopyTo(fileName + ".bak", true); } ImportHelpers.EnsureDirectoryExists(Path.GetDirectoryName(fileName)); File.WriteAllText(fileName, _script.ToString()); Debug.Log("Saved to " + fileName); }
private void Save() { var sb = new StringBuilder(); foreach (var entry in _entries) { var asset = entry as PlacementDataAsset; string fullIdentifier = asset != null ? $"{asset.Type}:{asset.AssetType}:{asset.Name}" : entry.Type; string dataString = entry.Data.ToString(Formatting.None); sb.AppendLine($"{fullIdentifier}:{dataString}"); } var fileName = _file.DestinationFile.FullName; if (_file.DestinationFile.Exists) { ((FileInfo)_file.DestinationFile).CopyTo(fileName + ".bak", true); } ImportHelpers.EnsureDirectoryExists(Path.GetDirectoryName(fileName)); File.WriteAllText(fileName, sb.ToString()); Debug.Log("Saved to " + fileName); }