UnityEditor代码分享导出材质贴图和Mesh本体

运行时可导出

可导出多个材质

导出Mesh_0到Assets/目录下

#if UNITY_EDITOR
using UnityEditor;
[CustomEditor(typeof(ComperhenceMeshMonoViewer))]
public class ComperhenceMeshMonoViewerEditor : Editor
{
	public override void OnInspectorGUI()
	{
		base.OnInspectorGUI();

		if (GUILayout.Button("导出 Mesh & Mat"))
        {
			string folderPath = EditorUtility.SaveFolderPanel("", "选择目录", "");
			if (string.IsNullOrEmpty(folderPath)) {
				
				return;
			}
			ComperhenceMeshMonoViewer _target = target as ComperhenceMeshMonoViewer;


			//Material mat = _target.GetComponent<Renderer>().sharedMaterial;
			List<string> lstNameIdentity = new List<string>();
			Material[] mats = _target.GetComponent<Renderer>().sharedMaterials;
			int cursor = 0;
			foreach (var mat in mats)
			{
				var texs = GetCertainMaterialTextures(mat);
				string go_name = _target.gameObject.name;
				foreach (var tex in texs)
				{
					if (tex == null) continue;
					//string saveRelativePath = tex;

					//string frmPath = Application.dataPath + "/../" + saveRelativePath;
					//GameUtility.SafeCopyFile(frmPath, folderPath + "/" + saveRelativePath);
					Texture2D tt = TextureUtils.TextureToTexture2D(tex);
					string tex_name = tex.name;
					if (lstNameIdentity.Contains(tex_name) == false)
					{
						lstNameIdentity.Add(tex_name);
					}
					else
					{
						tex_name = tex.name + "_" + cursor;
					}
					GameUtility.SaveTexture(string.Format("{0}/{1}/{2}.png", folderPath, go_name, tex.name), tt);
					cursor++;
				}


				GameUtility.SaveConfig(string.Format("{0}/{1}/{2}", folderPath, go_name, mat.shader.name), "");
			}
			}
    }

	public Texture[] GetCertainMaterialTextures(Material _mat)
	{
		List<Texture> results = new List<Texture>();

		Shader shader = _mat.shader;
		for (int i = 0; i < ShaderUtil.GetPropertyCount(shader); ++i)
		{
			if (ShaderUtil.GetPropertyType(shader, i) == ShaderUtil.ShaderPropertyType.TexEnv)
			{
				string propertyName = ShaderUtil.GetPropertyName(shader, i);
				Texture tex = _mat.GetTexture(propertyName);
				//string texPath = AssetDatabase.GetAssetPath(tex.GetInstanceID());
				//results.Add(texPath);
				results.Add(tex);
			}
		}

		return results.ToArray();
	}
}
#endif

(还缺一个 GameUtility 类,保存文件用,之后再补上吧)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值