using UnityEngine; using System.Collections; [ExecuteAlways] [RequireComponent(typeof(Camera))] //提供一个后处理的基类,主要功能在于直接通过Inspector面板拖入shader,生成shader对应的材质 public class PostEffectsBaseEx : MonoBehaviour { //Inspector面板上直接拖入 public Shader shader = null; private Material _material = null; public Material material { get { if (_material == null) _material = GenerateMaterial(shader); return _material; } } //根据shader创建用于屏幕特效的材质 protected Material GenerateMaterial(Shader shader) { if (shader == null) return null; //需要判断shader是否支持 if (shader.isSupported == false) return null; Material material = new Material(shader); material.hideFlags = HideFlags.DontSave; if (material) return material; return null; } private void OnDisable() { // remove material if (_material) { #if UNITY_EDITOR DestroyImmediate(_material); #else Destroy(_material); #endif _material = null; } } }