ScreenPocket - 画面の隙間

Unityエンジニアの日々の雑記。たまにpython3とDirectXも触ります

OnPostRender()でのスクリーンキャプチャ

f:id:ScreenPocket:20160805015044p:plain

前回、スクリーンエフェクトをかける場合は、
OnRenderImage()で行うと重そう(…と言うより、OnRenderImage()を定義するだけでも重そう)だから、
OnPostRender()でスクリーンキャプチャして画像加工すればいいんじゃない?

と書きましたが、じゃあOnPostRender()でスクリーンキャプチャってどうすれば良いのよ?

という事で、コード書きました。

 

public class OnPostRenderCapture : MonoBehaviour
{
[SerializeField]
private RenderTexture captureImage = null;

void OnPostRender()
{
if (captureImage == null)
{
return;
}

Graphics.Blit(null, captureImage);
}
}

このコンポーネントをカメラにくっつければOK。captureImageにはInspectorでRenderTextureをくっつけておくか、Awake()かStart()でRenderTextureを作ってくっつけるかするのを忘れすに!

…で、多分この画像をイタに貼っつけると、機種依存で上下が反転したりするので

Unity - マニュアル: プラットフォーム別のレンダリングの違い

この辺を見て、表示面用に上下反転させるシェーダを用意すると良いでしょう。

これを使えばわざわざCameraのRenderTargetにRenderTextureを入れなくても良いから楽です。