問題
CameraにOnRenderImage
をoverrideしたスクリプトをアタッチする形式でポストエフェクトを作成したところUnityEditor上では意図通りの動作を確認できるのに、Androidの実機で確認すると画面が真っ黒になるという問題に遭遇しました。
解決方法
.shader
でZTest Always
を使うようにすると、意図通り動くようになりました。
例
Shader "Custom/HorizontalScaleShader"
{
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
[PowerSlider(1)]_HorizontalScale ("HorizontalScale", Range(0.01,1.00)) = 1
}
SubShader {
Pass {
Tags { "RenderType"="Opaque" }
ZTest Always
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float _HorizontalScale;
struct v2f {
half4 pos : POSITION;
half2 uv : TEXCOORD0;
};
float4 _MainTex_ST;
v2f vert(appdata_base v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
half4 frag(v2f i) : COLOR {
half2 uv = half2(i.uv);
float horizontalScale = _HorizontalScale;
uv.x = horizontalScale*uv.x+(1.0-horizontalScale)*0.5;
fixed4 col = tex2D(_MainTex, uv);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}
結果
実機で動いた
参考文献