public static GameObject BakeRegion(AtlasAsset atlasAsset, AtlasRegion region, bool autoSave = true)
    {
        Atlas  atlas             = atlasAsset.GetAtlas();
        string atlasAssetPath    = AssetDatabase.GetAssetPath(atlasAsset);
        string atlasAssetDirPath = Path.GetDirectoryName(atlasAssetPath);
        string bakedDirPath      = Path.Combine(atlasAssetDirPath, atlasAsset.name);
        string bakedPrefabPath   = Path.Combine(bakedDirPath, GetPathSafeRegionName(region) + ".prefab").Replace("\\", "/");

        GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(GameObject));
        GameObject root;
        Mesh       mesh;
        bool       isNewPrefab = false;

        if (!Directory.Exists(bakedDirPath))
        {
            Directory.CreateDirectory(bakedDirPath);
        }

        if (prefab == null)
        {
            root        = new GameObject("temp", typeof(MeshFilter), typeof(MeshRenderer));
            prefab      = (GameObject)PrefabUtility.CreatePrefab(bakedPrefabPath, root);
            isNewPrefab = true;
            Object.DestroyImmediate(root);
        }

        mesh = (Mesh)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(Mesh));

        Material mat = null;

        mesh = atlasAsset.GenerateMesh(region.name, mesh, out mat);
        if (isNewPrefab)
        {
            AssetDatabase.AddObjectToAsset(mesh, prefab);
            prefab.GetComponent <MeshFilter>().sharedMesh = mesh;
        }

        EditorUtility.SetDirty(mesh);
        EditorUtility.SetDirty(prefab);

        if (autoSave)
        {
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }


        prefab.GetComponent <MeshRenderer>().sharedMaterial = mat;

        return(prefab);
    }
	public static GameObject BakeRegion (AtlasAsset atlasAsset, AtlasRegion region, bool autoSave = true) {
		Atlas atlas = atlasAsset.GetAtlas();
		string atlasAssetPath = AssetDatabase.GetAssetPath(atlasAsset);
		string atlasAssetDirPath = Path.GetDirectoryName(atlasAssetPath);
		string bakedDirPath = Path.Combine(atlasAssetDirPath, atlasAsset.name);
		string bakedPrefabPath = Path.Combine(bakedDirPath, GetPathSafeRegionName(region) + ".prefab").Replace("\\", "/");

		GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(GameObject));
		GameObject root;
		Mesh mesh;
		bool isNewPrefab = false;

		if (!Directory.Exists(bakedDirPath))
			Directory.CreateDirectory(bakedDirPath);

		if (prefab == null) {
			root = new GameObject("temp", typeof(MeshFilter), typeof(MeshRenderer));
			prefab = (GameObject)PrefabUtility.CreatePrefab(bakedPrefabPath, root);
			isNewPrefab = true;
			Object.DestroyImmediate(root);
		}

		mesh = (Mesh)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(Mesh));

		Material mat = null;
		mesh = atlasAsset.GenerateMesh(region.name, mesh, out mat);
		if (isNewPrefab) {
			AssetDatabase.AddObjectToAsset(mesh, prefab);
			prefab.GetComponent<MeshFilter>().sharedMesh = mesh;
		}

		EditorUtility.SetDirty(mesh);
		EditorUtility.SetDirty(prefab);

		if (autoSave) {
			AssetDatabase.SaveAssets();
			AssetDatabase.Refresh();
		}


		prefab.GetComponent<MeshRenderer>().sharedMaterial = mat;

		return prefab;
	}