Unity 图片 涂抹/擦除/刮刮乐 效果展示 包含 Sprite, Image, Mesh的涂抹效果

该文章展示了在Unity2D中实现图片的涂抹、擦除和刮刮乐效果的方法。通过使用Sprite、Image和Mesh,结合特定的脚本和刷子纹理,可以创建出擦除进度显示和不同类型的擦除样式。文章提供了一个完整的案例插件下载链接,并详细解释了初始化和管理擦除功能的关键代码段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值