うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】uGUI を RenderTexture に描画している際に Mask が有効にならない場合の対応

以下のように RenderTexture を生成して、uGUI を映しているカメラに紐付けたところ
下図のように Mask が適応されていない

private void Init()
{
    _renderTexture = new RenderTexture(200, 200, 0);
    ・・・
    _camera = _instance.GetComponentInChildren<Camera>();
    _camera.targetTexture = _renderTexture;
    _camera.Render();
}

f:id:hacchi_man:20200918002221p:plain

原因

RenderTexture の Depth は 16 未満の場合は ステンシルバッファーを見ないため
ステンシルバッファーを使った Mask が適応されなかった模様

Unity - Scripting API: RenderTexture.depth

解決方法

Depth を 17以上 にしてやることで解決できた

※ 17以上 24 以下の場合は内部で 24 にしているのではないかと推測

_renderTexture = new RenderTexture(200, 200, 24);

すると Mask が適応された ものが RenderTexture に映った

f:id:hacchi_man:20200918002555p:plain