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

在这里插入图片描述

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

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用Unity自带的RenderTexture来将ToonShader的效果输出为PNG图片。下面是一个简单的示例代码: ```csharp using UnityEngine; public class ToonShaderExporter : MonoBehaviour { public Shader toonShader; public RenderTexture renderTexture; public string outputFileName = "output.png"; private void Start() { // 创建RenderTexture,用于将ToonShader效果渲染到其中 renderTexture = new RenderTexture(Screen.width, Screen.height, 24); renderTexture.format = RenderTextureFormat.ARGB32; renderTexture.Create(); // 将相机的TargetTexture设置为renderTexture Camera.main.targetTexture = renderTexture; // 将ToonShader赋给相机的Material Camera.main.SetReplacementShader(toonShader, ""); // 渲染相机 Camera.main.Render(); // 恢复相机的TargetTexture为空 Camera.main.targetTexture = null; // 从renderTexture中读取像素数据 Texture2D texture = new Texture2D(renderTexture.width, renderTexture.height, TextureFormat.RGB24, false); RenderTexture.active = renderTexture; texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0); texture.Apply(); RenderTexture.active = null; // 将像素数据保存为PNG图片 byte[] bytes = texture.EncodeToPNG(); System.IO.File.WriteAllBytes(outputFileName, bytes); // 销毁renderTexture和texture Destroy(renderTexture); Destroy(texture); } } ``` 将上述代码添加到一个空物体上,并将ToonShader赋给toonShader变量。然后运行游戏,代码会将ToonShader的效果渲染到RenderTexture,并将RenderTexture保存为PNG图片。最终的PNG图片会保存在Unity项目的根目录下,文件名为output.png。你可以根据需要修改输出文件名和路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客柒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值