public void OnButtonClick() { SerializedObject s_tree = serializedObject; TreeData tree = (TreeData)target; step_ms.execute(ref tree); pl.execute(ref tree); step_mg.execute(ref tree); s_tree.ApplyModifiedProperties(); string outputFilename = "Assets/Meshes/" + tree.mesh_file_name + ".asset"; AssetDatabase.CreateAsset(tree.mesh, outputFilename); TreeModelBehavior[] all_tmb = (TreeModelBehavior[])GameObject.FindObjectsOfType(typeof(TreeModelBehavior)); foreach (TreeModelBehavior tmb in all_tmb) { GameObject gameObj = tmb.gameObject; if (tmb.treeModel == tree) { MeshFilter meshFilter = gameObj.GetComponent <MeshFilter>(); MeshRenderer meshRenderer = gameObj.GetComponent <MeshRenderer>(); // reset ------- if (!meshFilter) { meshFilter = gameObj.AddComponent <MeshFilter>(); } else if (meshFilter && meshFilter.sharedMesh) { DestroyImmediate(meshFilter.sharedMesh, true); } if (!meshRenderer) { meshRenderer = gameObj.AddComponent <MeshRenderer>(); } // TODO : remove leaves into the scene (child gameobjects) // ------------- meshFilter.sharedMesh = AssetDatabase.LoadAssetAtPath <Mesh>(outputFilename); } } }