Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrading to Unity5 and adding support for merging multiple meshes prior to export #6

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion unity/Assets/OBJ-IO/Editor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

121 changes: 85 additions & 36 deletions unity/Assets/OBJ-IO/Editor/OBJEditor.cs
Original file line number Diff line number Diff line change
@@ -1,50 +1,99 @@

using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Collections;

using UnityEngine;
using UnityEditor;

using UnityEngine;
using UnityExtension;


public class OBJWindow : EditorWindow
{
//------------------------------------------------------------------------------------------------------------
private MeshFilter m_MeshFilter = null;

//------------------------------------------------------------------------------------------------------------
[MenuItem("OBJ-IO/OBJ Mesh Exporter")]
public static void Execute()
{
OBJWindow.GetWindow<OBJWindow>();
}

//------------------------------------------------------------------------------------------------------------
private void OnGUI()
{
m_MeshFilter = (MeshFilter)EditorGUILayout.ObjectField("MeshFilter", m_MeshFilter, typeof(MeshFilter), true);

if (m_MeshFilter != null)
private Transform m_root = null;

//------------------------------------------------------------------------------------------------------------
[MenuItem("Window/OBJ-IO Mesh Exporter")]
public static void Execute()
{
OBJWindow.GetWindow<OBJWindow>();
}

[MenuItem("CONTEXT/Transform/OBJ-IO Export Mesh")]
public static void ExportTransform(MenuCommand command)
{
var selection = command.context as Transform;
ExportMesh(selection);
}

[MenuItem("CONTEXT/Transform/OBJ-IO Export Mesh", true)]
public static bool CheckTransformExport(MenuCommand command)
{
var selection = command.context as Transform;
if (selection == null)
{
if (GUILayout.Button("Export OBJ"))
{
var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_MeshFilter.name + ".obj", "obj");

if (File.Exists(lOutputPath))
{
File.Delete(lOutputPath);
}

var lStream = new FileStream(lOutputPath, FileMode.Create);
var lOBJData = m_MeshFilter.sharedMesh.EncodeOBJ();
OBJLoader.ExportOBJ(lOBJData, lStream);
lStream.Close();
return false;
}

return selection.GetComponent<MeshFilter>() != null || selection.GetComponentInChildren<MeshFilter>() != null;
}

[MenuItem("CONTEXT/MeshFilter/OBJ-IO Export Mesh")]
public static void ExportMeshFilter(MenuCommand command)
{
var selection = command.context as MeshFilter;
ExportMesh(selection.transform);
}


//------------------------------------------------------------------------------------------------------------
private void OnGUI()
{
m_root = (Transform)EditorGUILayout.ObjectField("Root", m_root, typeof(Transform), true);

if (m_root == null)
{
GUILayout.Label("Please provide a Transform which contains (including it's children) at least on or more MeshFilter component");
return;
}

if (GUILayout.Button("Export OBJ"))
{
ExportMesh(m_root);
}
}

private static void ExportMesh(Transform root) {
var meshFilters = new List<MeshFilter>();
meshFilters.AddRange(root.GetComponents<MeshFilter>());
meshFilters.AddRange(root.GetComponentsInChildren<MeshFilter>());

Mesh mesh;
if (meshFilters.Count > 0) {
CombineInstance[] combine = new CombineInstance[meshFilters.Count];
for (int i = 0; i < meshFilters.Count; ++i) {
combine[i].mesh = meshFilters[i].sharedMesh;
combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
}

mesh = new Mesh();
mesh.CombineMeshes(combine);
mesh.Optimize();
mesh.name = root.name;
} else {
return;
}
else

var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", root.name + ".obj", "obj");

if (File.Exists(lOutputPath))
{
GUILayout.Label("Please provide a MeshFilter");
File.Delete(lOutputPath);
}
}

var lStream = new FileStream(lOutputPath, FileMode.Create);
var lOBJData = mesh.EncodeOBJ();
OBJLoader.ExportOBJ(lOBJData, lStream);
lStream.Close();
}
}
4 changes: 3 additions & 1 deletion unity/Assets/OBJ-IO/Editor/OBJEditor.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion unity/Assets/OBJ-IO/Examples.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion unity/Assets/OBJ-IO/Examples/Meshes.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions unity/Assets/OBJ-IO/Examples/Meshes/Materials.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

145 changes: 145 additions & 0 deletions unity/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 5
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Teapot001Mat
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_CustomRenderQueue: -1
m_SavedProperties:
serializedVersion: 2
m_TexEnvs:
data:
first:
name: _MainTex
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _BumpMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _DetailNormalMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _ParallaxMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _OcclusionMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _EmissionMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _DetailMask
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _DetailAlbedoMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
data:
first:
name: _MetallicGlossMap
second:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
data:
first:
name: _Cutoff
second: .5
data:
first:
name: _SrcBlend
second: 1
data:
first:
name: _DstBlend
second: 0
data:
first:
name: _Parallax
second: .0199999996
data:
first:
name: _ZWrite
second: 1
data:
first:
name: _Glossiness
second: .5
data:
first:
name: _BumpScale
second: 1
data:
first:
name: _OcclusionStrength
second: 1
data:
first:
name: _DetailNormalMapScale
second: 1
data:
first:
name: _UVSec
second: 0
data:
first:
name: _EmissionScaleUI
second: 0
data:
first:
name: _Mode
second: 0
data:
first:
name: _Metallic
second: 0
m_Colors:
data:
first:
name: _EmissionColor
second: {r: 0, g: 0, b: 0, a: 1}
data:
first:
name: _Color
second: {r: .800000012, g: .800000012, b: .800000012, a: 1}
data:
first:
name: _EmissionColorUI
second: {r: 1, g: 1, b: 1, a: 1}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion unity/Assets/OBJ-IO/Examples/Scenes.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified unity/Assets/OBJ-IO/Examples/Scenes/Example.unity
Binary file not shown.
4 changes: 3 additions & 1 deletion unity/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading