Unity 2D图片 涂抹/擦除/刮刮乐 效果展示 包含 Sprite, Image, Mesh的涂抹效果
参数
progressText: 显示百分比的文本
maskImg: 需要擦除的图片
brush: 笔刷样式
案例
最新版完整插件下载地址:
https://download.csdn.net/download/qq_39162566/87408070
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 擦除Demo
/// </summary>
public class Dear31ErasureDemo : MonoBehaviour
{
[SerializeField] private Text progressText; //显示 当前擦除的进度
[SerializeField] private Image maskImg; //遮罩图 待擦除的
[SerializeField] private Texture brush; //笔刷的纹理
private ScratchCardManager cardManager; //ScratchCardManager 负责ScratchCard的组件 擦除功能管理
//需要在Awake中进行初始化操作
//其实你放到Start里也一样。。。
//但是最好Manager这类创建和实例化 放到 Awake里来做
void Awake()
{
#region Initialize
var prefab = Resources.Load<GameObject>( "Prefabs/ScratchCard" );
if ( null == prefab )
{
throw new UnityException( "ScratchCard 预设文件找不到..." );
}
var instance = GameObject.Instantiate( prefab );
if ( null == instance )
{
#if UNITY_EDITOR || ENABLE_LOG
string url = UnityEditor.AssetDatabase.GetAssetOrScenePath( prefab );
Debug.LogError( $"ScratchCard 预设实例化失败: {url}", prefab );
#endif
throw new UnityException( "Prefabs/ScratchCard 预设实例化失败..." );
}
cardManager = instance.GetComponent<ScratchCardManager>();
if( null == cardManager )
{
#if UNITY_EDITOR || ENABLE_LOG
string url = UnityEditor.AssetDatabase.GetAssetOrScenePath( prefab );
Debug.LogError( $"ScratchCard 预设文件不包含ScratchCardManager组件: {url}", prefab );
#endif
throw new UnityException( "Prefabs/ScratchCard 预设文件不包含ScratchCardManager组件..." );
}
#endregion
cardManager.Progress.OnProgress += OnScratchProgress;
cardManager.Progress.OnCompleted += OnScratchCompleted;
cardManager.RenderType = ScratchCardAsset.Core.ScratchCardRenderType.CanvasRenderer;
cardManager.CanvasRendererCard = maskImg;
cardManager.MainCamera = Camera.main;
cardManager.BrushTexture = brush;
}
private void OnScratchProgress( float progress )
{
progressText.text = string.Format( "{0:P}", progress );
}
private void OnScratchCompleted( float progress )
{
cardManager.Progress.OnProgress -= OnScratchProgress;
cardManager.Progress.OnCompleted -= OnScratchCompleted;
progressText.text = string.Format( "{0:P}", progress );
progressText.color = Color.green;
}
}