Raw Image
RectMask2D

Mask

Mask は目に見える UI コントロールというよりは、むしろコントロールの子要素の概観を修正する方法です。Mask は子の形状を親要素のものに制限します。ですので、もし子が親よりも大きければ、親の範囲に収まる子の部分だけが表示されます。

Panel によってマスキングされている大きな画像領域(スクロールバーがコントロールを分離させています)
Panel によってマスキングされている大きな画像領域(スクロールバーがコントロールを分離させています)

プロパティー

プロパティー: 説明:
Show Graphic マスキング(親)オブジェクトのグラフィックが子オブジェクト上に透明度を伴って描画されるか。

詳細

Mask は一般的に大きい画像の中の小さな領域を表示するのに使います。たとえば、Panel オブジェクト (メニューより : GameObject > Create UI > Panel ) を “枠” として使用するとします。このためにはまず、Panel オブジェクトの子に Image を作成します。その領域を写すためには、Image の位置を直接 Panel 領域の後ろに設定します。

子の Image を後ろに伴い、赤色で表示されている Panel 領域
子の Image を後ろに伴い、赤色で表示されている Panel 領域

その後、Mask コンポーネントを Panel に追加します。子 Image で Panel の外側にある部分は、Panel の形状で隠されているので見えなくなります。

マスクされている部分は薄く表示されるが、実際には見えない
マスクされている部分は薄く表示されるが、実際には見えない

もし画像が移動すると Panel から明らかにされている部分のみ表示されます。たとえば、この動きは Scrollbar でスクロール可能なマップビューワーを作成する、などでコントロールできます。

実装

マスキングは、GPU のステンシルバッファを使用して実装されます。

  • 最初のマスク要素は、ステンシルバッファに 1 を書き込みます。
  • レンダリングするとき、重ねたマスクの下にあるすべての要素をチェックし、ステンシルバッファで 1 になる領域でのみ描画します。
  • ネストされたマスクは、バッファにインクリメンタルビットマスクを書き込みます。すなわち、レンダリングできる子要素の論理(logical )& 描画されるステンシル値を意味します。
Raw Image
RectMask2D