Unityでスクラッチカードを削るような、「画像を削る」のを簡単に実装してみます。「簡単」という部分に重きを置いているので最適ではないです。
はじめに
「Unity 2022.3.14f1」ヴァージョンで作成しています。下記記事にてマウスで画面に線を引いています。これを利用して、線を引くのではなく画像(スクラッチ部分)を削っていきます。
実装開始
まずはLinerendererで画面に線を描くのを実装してから、画像を削るのに変更していきます。
画面の作成
Hierarchyで「2DObject」→「Sprites」→「Square」を追加します。名前を「Base」にしておきます。削る対象です。

次に空オブジェクトを追加します。名前は「Shave」にしておきます。

下記スクリプトを作成します。
using UnityEngine; public class Shave : MonoBehaviour { [SerializeField] private LineRenderer _rend; [SerializeField] private Camera _cam; private int posCount = 0; private float interval = 0.3f; private void Update() { Vector2 mousePos = _cam.ScreenToWorldPoint(Input.mousePosition); if (Input.GetMouseButton(0)) SetPosition(mousePos); else if (Input.GetMouseButtonUp(0)) posCount = 0; } private void SetPosition(Vector2 pos) { if (!PosCheck(pos)) return; posCount++; _rend.positionCount = posCount; _rend.SetPosition(posCount - 1, pos); } private bool PosCheck(Vector2 pos) { if (posCount == 0) return true; float distance = Vector2.Distance(_rend.GetPosition(posCount - 1), pos); if (distance > interval) return true; else return false; } }
Shaveに「LineRenderer」とスクリプトを追加して、パラメータをセットします。

実行すると下記のような感じになります。

画面に線を引く詳しい記事は下記にて。
画像を削る
次に画像を削れるようにしていきます。各マテリアルを変更することで実装していきます。Projectフォルダで「Create」→「Material」を2つ追加します。

名前をそれぞれ「BaseMaterial」と「ShaveMaterial」にします。

Stencilを利用して画像にマスクをかけていくので、各MaterialのShaderを「UI/Default」に変更します。Stencilが利用できればいいので、「UI/Unlit/Detail」などでもOKです。とりあえず一番シンプルな「UI/Default」を利用します。

重要となる項目はStencilComparison、StencilOperationです。数字を入力しますが、Enum型で定義されています。
簡単に言うと、画像の各ピクセルにバッファ値というのがあり、バッファ値により描画するかどうかの設定が「StencilComparison」、バッファ値の書き換えを「StencilOperation」で行っています。(細かく言うとちょっと違いますが…)
下記のようにマテリアルを変更します。削る側(Base)の描画をバッファ値が違う場合に変更し、削る側(Shave)はバッファ値の書き換えを行います。ColorMaskは色の表示で、0で非表示にします。

BaseのColorを変更して、Materialをセットします。

ShaveはLineRendereのWidth、Vericelsを好きに変更して、Materialをセットします。

実行すると下記のような感じになります。

自分でShaderを作成したほうが様々な応用が利きますが、あくまでも「簡単の実装」というのに焦点を置いて実装してみました。
Properties { [Enum(UnityEngine.Rendering.CompareFunction)]_StencilComparison("Stencil Comparison", Float) = 0.0 ... }