Unity如何实现在Editor下绘制Material编辑面板(类似MeshRender的Material材质面板)

image.png

image.png

image.png
using System.IO;
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(PostProcessMaterial))]
public class PostProcessMaterialEditor : Editor
{
    private PostProcessMaterial _postProcessMaterial;
    private Material _tempMaterial;
    private MaterialEditor _materialEditor;

    private void OnEnable()
    {
        if (_postProcessMaterial == null)
        {
            _postProcessMaterial = (PostProcessMaterial)target;
        }
    }

    private void OnDisable()
    {
        if (_materialEditor != null)
        {
            DestroyImmediate(_materialEditor);
        }
    }

    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        if (_postProcessMaterial.material == null) return;
        if (_materialEditor == null || _tempMaterial != _postProcessMaterial.material)
        {
            _tempMaterial = _postProcessMaterial.material;
            _materialEditor = CreateEditor(_postProcessMaterial.material) as MaterialEditor;
        }

        if (_materialEditor == null) return;
        _materialEditor.DrawHeader();
        //非Assets目录下的材质球不允许编辑、ShaderGraph等
        var isDefaultMaterial = false;
        var path = AssetDatabase.GetAssetPath(_postProcessMaterial.material);
        if (string.IsNullOrEmpty(path) || !path.StartsWith("Assets/") || (Path.GetExtension(path) != ".mat" && Path.GetExtension(path) != ".asset"))
        {
            isDefaultMaterial = true;
        }

        using (new EditorGUI.DisabledGroupScope(isDefaultMaterial))
        {
            _materialEditor.OnInspectorGUI();
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容