- 问题 控制一个节点整个的透明度
- 用刚学到的渲染纹理
- 对想要控制透明的节点 添加layer 在相机上cull
- C#
using UnityEngine;
using System.Collections;
public class PostEffectsFade : PostEffectsBase {
public Shader fadeShader;
private Material fadeMat = null;
public Material material {
get {
fadeMat = CheckShaderAndCreateMaterial(fadeShader, fadeMat);
return fadeMat;
}
}
[Range(0F, 1F)]
public float m_fade;
void OnRenderImage(RenderTexture src, RenderTexture dest) {
if (material != null) {
material.SetFloat("_Fade", m_fade);
float a = material.GetFloat("_Fade");
Debug.Log("fade:" + a);
Graphics.Blit(src, dest, material);
} else {
Graphics.Blit(src, dest);
}
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using System.Collections.Generic;
[ExecuteInEditMode]
[RequireComponent (typeof(Camera))]
public class PostEffectsBase : MonoBehaviour {
// Called when start
protected void CheckResources() {
bool isSupported = CheckSupport();
if (isSupported == false) {
NotSupported();
}
//UnityEngine.UI.Button b = new UnityEngine.UI.Button();
//b.onClick.RemoveAllListeners
}
// Called in CheckResources to check support on this platform
protected bool CheckSupport() {
if (SystemInfo.supportsImageEffects == false || SystemInfo.supportsRenderTextures == false) {
Debug.LogWarning("This platform does not support image effects or render textures.");
return false;
}
return true;
}
// Called when the platform doesn't support this effect
protected void NotSupported() {
enabled = false;
}
protected void Start() {
CheckResources();
}
// Called when need to create the material used by this effect
protected Material CheckShaderAndCreateMaterial(Shader shader, Material material) {
if (shader == null) {
return null;
}
if (shader.isSupported && material && material.shader == shader)
return material;
if (!shader.isSupported) {
return null;
}
else {
material = new Material(shader);
material.hideFlags = HideFlags.DontSave;
if (material)
return material;
else
return null;
}
}
}
Shader "Custom/TestFade" {
Properties {
_MainTex("Base (RGB)",2D) = "white" {}
_Fade("fade",Range(0,1)) = 1.0
}
SubShader {
// We must be tranparent,so other objects are drawn before this one
Tags { "RenderType"="Opaque" "Queue"="Transparent"}
Pass {
Tags { "LightMode" = "forwardBase" }
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
fixed _Fade;
sampler2D _MainTex;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert(appdata_img v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
return o;
}
fixed4 frag(v2f i) : SV_Target {
fixed4 color = tex2D(_MainTex,i.uv);
return fixed4(color.r,color.g,color.b, _Fade);
}
ENDCG
}
}
Fallback Off
}
- 发现选了depth only之后还是会渲染全部 达不到要求 看看后面怎么解决