예제 #1
0
 private static void WriteAllGameObjectAssets(AssetDatabaseBuilder builder)
 {
     foreach (var gameObject in Object.FindObjectsOfType <GameObject>())
     {
         if (!gameObject.activeInHierarchy)
         {
             continue;
         }
         foreach (var component in gameObject.GetComponents <Component>())
         {
             var componentType = component.GetType();
             SceneObjectExportHandlerBase handler = null;
             if (ExportHandlers.TryGetValue(componentType, out handler))
             {
                 handler.Export(builder, component);
             }
             else
             {
                 foreach (var a in ExportHandlers.Values)
                 {
                     if (componentType.IsSubclassOf(a.TargetType))
                     {
                         a.Export(builder, component);
                         break;
                     }
                 }
             }
         }
     }
 }
예제 #2
0
    public override void Export(AssetDatabaseBuilder builder, Object target)
    {
        var meshRenderer = target as MeshRenderer;

        foreach (var material in meshRenderer.sharedMaterials)
        {
            ExportTexture(builder, material);
        }
    }
예제 #3
0
    public static string[] OnWillSaveAssets(string[] paths)
    {
        using (var writer = new StreamWriter("Assets/Resources/Scenes/main.assets", false))
        {
            var builder = new AssetDatabaseBuilder();
            builder.Writer = writer;

            writer.WriteLine("%YAML 1.1");
            writer.WriteLine("% TAG !u!tag:unity3d.com, 2011:");

            WriteAllGameObjectAssets(builder);
        }
        return(paths);
    }
예제 #4
0
    public override void Export(AssetDatabaseBuilder builder, Object target)
    {
        var behaviour = target as MonoBehaviour;
        var type      = behaviour.GetType();
        var asset     = Resources.Load(type.Name);
        var fileId    = asset.GetLocalFileId();

        if (builder.ContainsFileId(fileId))
        {
            return;
        }

        builder.WriteHeader <MonoBehaviour>(fileId);
        builder.WriteProperty("name", behaviour.GetType().Name);
        builder.WriteProperty("ext", ".cs");

        builder.FileIds.Add(fileId);
    }
예제 #5
0
    private void ExportTexture(AssetDatabaseBuilder builder, Material material)
    {
        var texture = material.mainTexture;

        if (texture == null)
        {
            return;
        }

        var textureFileId = texture.GetLocalFileId();

        if (builder.ContainsFileId(textureFileId))
        {
            return;
        }

        var path = AssetDatabase.GetAssetPath(texture);
        var ext  = Path.GetExtension(path);

        path = PathEx.GetPathWithoutExtension(path);

        builder.WriteHeader <Texture>(textureFileId);
        builder.WriteProperty("name", texture.name);
        builder.WriteProperty("path", path);
        builder.WriteProperty("ext", ext);

        var materialFileId = material.GetLocalFileId();

        if (builder.ContainsFileId(materialFileId))
        {
            return;
        }

        builder.WriteHeader <Material>(materialFileId);
        builder.WriteProperty("name", material.name);
        builder.WriteFileIdProperty("texture", textureFileId);

        builder.FileIds.Add(textureFileId);
        builder.FileIds.Add(materialFileId);
    }
예제 #6
0
    public override void Export(AssetDatabaseBuilder builder, Object target)
    {
        var meshFilter = target as MeshFilter;

        var mesh   = meshFilter.sharedMesh;
        var fileId = mesh.GetLocalFileId();

        if (builder.ContainsFileId(fileId))
        {
            return;
        }

        var path = AssetDatabase.GetAssetPath(mesh);
        var ext  = Path.GetExtension(path);

        path = PathEx.GetPathWithoutExtension(path);

        builder.WriteHeader <Mesh>(fileId);
        builder.WriteProperty("name", mesh.name);
        builder.WriteProperty("path", path);
        builder.WriteProperty("ext", ext);

        builder.FileIds.Add(fileId);
    }
예제 #7
0
 public abstract void Export(AssetDatabaseBuilder builder, Object target);