Unity 刮刮乐(优化极简)

news2024/11/29 6:32:07

废话不多说上代码,上图片,欢迎对Unity有兴趣的伙伴和我一起探讨学习

using UnityEngine;
using UnityEngine.UI;

public class ScratchCardWithSpriteRenderer : MonoBehaviour
{
    // 公开背景和遮罩的Sprite Renderer组件
    public SpriteRenderer backgroundRenderer;
    public SpriteRenderer maskRenderer;

    // 遮罩原图的副本,用于保存未刮开状态
    private Texture2D originalMaskTexture;

    // 刮擦笔刷大小
    public float brushSize = 50f;

    void Start()
    {
        // 获取遮罩原图纹理并保存副本
        Texture2D maskTexture = maskRenderer.sprite.texture as Texture2D;
        originalMaskTexture = new Texture2D(maskTexture.width, maskTexture.height);
        originalMaskTexture.SetPixels(maskTexture.GetPixels());
        originalMaskTexture.Apply();
    }

    void Update()
    {
        // 当鼠标左键按下时
        if (Input.GetMouseButtonDown(0))
        {
            // 获取当前鼠标屏幕坐标
            Vector3 mousePosition = Input.mousePosition;

            // 转换为世界坐标,并投影到遮罩renderer所在的平面
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay(mousePosition);
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("笔触"))) 
            {
                Vector2 localPoint = hit.textureCoord;
                ApplyScratch(localPoint);
            }
        }
    }

    void ApplyScratch(Vector2 touchPosition)
    {
        // 获取当前遮罩的Texture2D
        Texture2D currentMaskTexture = new Texture2D(maskRenderer.sprite.texture.width, maskRenderer.sprite.texture.height);
        currentMaskTexture.SetPixels(maskRenderer.sprite.texture.GetPixels());

        // 计算刮擦矩形区域
        int xMin = Mathf.FloorToInt(touchPosition.x * currentMaskTexture.width - brushSize / 2);
        int xMax = Mathf.CeilToInt(touchPosition.x * currentMaskTexture.width + brushSize / 2);
        int yMin = Mathf.FloorToInt(touchPosition.y * currentMaskTexture.height - brushSize / 2);
        int yMax = Mathf.CeilToInt(touchPosition.y * currentMaskTexture.height + brushSize / 2);

        // 限制刮擦区域在纹理内
        xMin = Mathf.Clamp(xMin, 0, currentMaskTexture.width);
        xMax = Mathf.Clamp(xMax, 0, currentMaskTexture.width);
        yMin = Mathf.Clamp(yMin, 0, currentMaskTexture.height);
        yMax = Mathf.Clamp(yMax, 0, currentMaskTexture.height);

        // 对刮擦区域设置透明色
        for (int x = xMin; x < xMax; x++)
        {
            for (int y = yMin; y < yMax; y++)
            {
                currentMaskTexture.SetPixel(x, y, Color.clear);
            }
        }

        // 应用刮擦结果
        currentMaskTexture.Apply();
        maskRenderer.sprite = Sprite.Create(currentMaskTexture, new Rect(0, 0, currentMaskTexture.width, currentMaskTexture.height), Vector2.one * 0.5f);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java复原IP 地址(力扣Leetcode93)

复原IP 地址 力扣原题链接 问题描述 有效 IP 地址正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是有效 IP 地址&#xff0c…

爬取b站音频和视频数据,未合成一个视频

一、首先找到含有音频和视频的url地址 打开一个视频&#xff0c;刷新后&#xff0c;找到这个包&#xff0c;里面有我们所需要的数据 访问这个数据包后&#xff0c;获取字符串数据&#xff0c;用正则提取&#xff0c;再转为json字符串方便提取。 二、获得标题和音频数据后&…

基于LSB(最低有效位)的图像水印算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

【蓝桥杯第十四届省赛B】(部分详解)

【01串的熵】 https://www.lanqiao.cn/problems/3498/learning/?subject_code1&group_code4&match_num14&match_flow1&origincup #include <iostream> #include<cmath> using namespace std; int main() {double n23333333;double sum0;for(int…

【跟着CHATGPT学习硬件外设 | 04】ADC

本文根据博主设计的Prompt由CHATGPT生成&#xff0c;形成极简外设概念。 &#x1f680; 1. 概念揭秘 1.1 快速入门 模数转换器&#xff08;ADC&#xff0c;Analog-to-Digital Converter&#xff09;是一种将模拟信号转换为数字信号的电子设备。模拟信号通常表示物理测量的连…

Learning To Count Everything

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;学习数一切东西1、研究背景2、提出方法3、模块详细3.1、多尺度特征提取模块3.2、密度预测模块 4、损失函数5、性能对比6、贡献 二…

mybatis标签解析教程

mybatis标签解析 标签结构 我们在mapper的xml文件中&#xff0c;使用动态SQL&#xff0c;那么这些标签<where>、<if>、<set>、<ForEach>、<Choose>、<Trim> 等是怎么解析的呢&#xff1f;我们先看包的结构 包结构中&#xff0c;script…

算法沉淀——拓扑排序

前言&#xff1a; 首先我们需要知道什么是拓扑排序&#xff1f; 在正式讲解拓扑排序这个算法之前&#xff0c;我们需要了解一些前置知识&#xff08;和离散数学相关&#xff09; 1、有向无环图&#xff1a; 指的是一个无回路的有向图。 入度&#xff1a;有向图中某点作为图…

微服务(基础篇-007-RabbitMQ部署指南)

目录 05-RabbitMQ快速入门--介绍和安装_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p65&vd_source60a35a11f813c6dff0b76089e5e138cc 1.单机部署 1.1.下载镜像 1.2.安装MQ 2.集群部署 2.1.集群分类 2.2.设置网络 视频地址&#xff1a; 05-Rab…

Topaz Gigapixel AI for Mac 图像放大软件

Topaz Gigapixel AI for Mac是一款专为Mac用户设计的智能图像放大软件。它采用了人工智能技术&#xff0c;特别是深度学习算法&#xff0c;以提高图像的分辨率和质量&#xff0c;使得图像在放大后仍能保持清晰的细节。这款软件的特点在于其能够将低分辨率的图片放大至高分辨率&…

银河麒麟V10:sudo: /usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位

一、引起原因&#xff1a; sudo chmod -R 777 bin 修改了/usr/bin/sudo的权限&#xff0c;引发后续问题。 二、现象&#xff1a; sudo执行命令报错&#xff1a; sudo: /usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位 三、解决方法&#xff08;知道root密码&…

Java复习第十四天学习笔记(CSS),附有道云笔记链接

【有道云笔记】十四 3.30 CSS https://note.youdao.com/s/3VormGXs 一、CSS定义和基本选择器 CSS定义&#xff1a;cascading style sheet 层叠样式表。 语法&#xff1a; 选择器 { 属性名1:属性值1; 属性名2:属性值2; 属性名3:属性值3; 属性名4:属性值4; } CSS使用&a…

经典永不过时 Wordpress模板主题

经得住时间考验的模板&#xff0c;才是经典模板&#xff0c;带得来客户的网站&#xff0c;才叫NB网站。 https://www.jianzhanpress.com/?p2484

基于大数据的学习资源推荐系统的设计与实现(论文+源码)_kaic

摘 要 本文首先实现了学习资源推送管理技术的发展&#xff0c;随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的语言和软件开发平台&#xff0c;依据需求分析开展控制模块制作和数据库查询构造设计&#xff0c;依据系统整体功能模块的设计&#xff0c;制作系统的功…

武汉星起航引领亚马逊跨境电商新浪潮,助推卖家向全球拓展

在全球化的浪潮中&#xff0c;跨境电商以其独特的魅力和无限潜力&#xff0c;正成为推动国际贸易发展的重要引擎。亚马逊&#xff0c;作为全球电商平台的佼佼者&#xff0c;以其卓越的技术、高效的服务和广阔的市场覆盖&#xff0c;引领着跨境电商的新风潮。而在这股风潮中&…

JUC并发编程——对于synchronized关键字的理解

现象&#x1f50d;&#xff1a; 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;最后输出的 counter一定为0 吗&#xff1f; Slf4j(topic "c.Test17") public class Test17 {static int counter 0;public…

Js逆向简单分析-某网站登录案例

文章目录 概要整体流程1.打开网站&#xff0c;输入数据进行登录2.对getlogin.php进行查看分析3.对于登录请求连接进行断点调试4.堆栈跟踪5.在网络上找在线md5加密 友情推荐 概要 某网站登录流量包逆向分析。 整体流程 1.打开网站&#xff0c;输入数据进行登录 用户名&#…

【C语言基础】:自定义类型(一)--> 结构体

文章目录 一、内置类型与自定义类型1.1 内置类型&#xff08;基本数据类型&#xff09;1.2 自定义类型 二、结构体2.1 结构体的声明2.2 结构体变量的创建和初始化2.3 结构体的特殊声明2.4 结构体的自引用 三、结构体内存对齐3.1 对齐规则3.2 为什么存在内存对齐3.3 修改默认对齐…

基于java+SpringBoot+Vue的校友社交系统设计与实现

基于javaSpringBootVue的校友社交系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 校友社交系统是一个为校友提供一个交流互动、信息共享的平台…

【高数】汤家凤高等数学辅导讲义+1800错题整理

第一章 极限与连续 1. 2. 3. 4. 5. 6. 7. 第二章 导数与微分 高等数学辅导讲义 1. 2. 3. 4. 5. 6. 7. 8. 1800 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 第三章 一元函数微分学的应用 高等数学辅导讲义 中值定理 题型一 题型二 题型三 题型四 题型五 单调性、极值与…