コード例 #1
0
ファイル: TextureExport.cs プロジェクト: tech-ticks/RTDXTools
    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());
            }
        }
    }
コード例 #2
0
    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;
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }