Skip to content

Instantly share code, notes, and snippets.

@daemon3000
Created November 20, 2016 17:17
Show Gist options
  • Save daemon3000/bec7ffc22e9b17617904af82f51ec8c2 to your computer and use it in GitHub Desktop.
Save daemon3000/bec7ffc22e9b17617904af82f51ec8c2 to your computer and use it in GitHub Desktop.
using UnityEngine;
using UnityEditor;
public static class pb_SaveMesh
{
[MenuItem("Tools/" + pb_Constant.PRODUCT_NAME + "/Object/Save Mesh", validate = true)]
private static bool VALIDATE_SaveSelectedMesh()
{
if(Selection.activeGameObject != null)
{
pb_Object obj = Selection.activeGameObject.GetComponent<pb_Object>();
return obj != null;
}
return false;
}
[MenuItem("Tools/" + pb_Constant.PRODUCT_NAME + "/Object/Save Object")]
private static void SaveSelectedMesh()
{
string savePath = EditorUtility.SaveFilePanelInProject("Save ProBuilder Mesh", Selection.activeGameObject.name, "prefab", "");
if(string.IsNullOrEmpty(savePath))
return;
GameObject gameObject = GameObject.Instantiate(Selection.activeGameObject, Selection.activeGameObject.transform.position, Selection.activeGameObject.transform.rotation) as GameObject;
MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>();
Mesh mesh = Mesh.Instantiate<Mesh>(meshFilter.sharedMesh);
mesh.hideFlags = HideFlags.None;
mesh.name = meshFilter.sharedMesh.name;
RemoveComponent<pb_Object>(gameObject);
RemoveComponent<pb_Entity>(gameObject);
GameObject prefab = PrefabUtility.CreatePrefab(savePath, gameObject, ReplacePrefabOptions.Default);
MeshFilter prefabMeshFilter = prefab.GetComponent<MeshFilter>();
MeshCollider prefabMeshCollider = prefab.GetComponent<MeshCollider>();
AssetDatabase.AddObjectToAsset(mesh, prefab);
prefabMeshFilter.sharedMesh = mesh;
prefabMeshCollider.sharedMesh = mesh;
GameObject.DestroyImmediate(gameObject);
AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(prefab));
Selection.activeGameObject = prefab;
ProjectWindowUtil.ShowCreatedAsset(prefab);
}
private static void RemoveComponent<T>(GameObject gameObject) where T : Component
{
T comp = gameObject.GetComponent<T>();
if(comp != null)
{
Component.DestroyImmediate(comp);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment