Unity 刮刮乐(优化极简)

废话不多说上代码,上图片,欢迎对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){// 获取当前遮罩的Texture2DTexture2D 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.hqwc.cn/news/578565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌seo怎么优化运营?

那些太大众的内容就不说了&#xff0c;在这里说一个后期谷歌seo可以去优化的一个方向&#xff0c;那就是电子邮件营销&#xff0c;这是一个间接营销seo的方案&#xff0c;电子邮件营销本身不会直接改变你在搜索结果中的排名&#xff0c;但它是一种强有力的工具&#xff0c;可以…

以syslog形式推送告警信息到UMP平台--主要为接口思路

背景 客户需求&#xff0c;根据当前时间获取到的接口返回值中的关键字段的数值进行判断&#xff0c;当超过阈值时推送可恢复告警&#xff0c;推送一次即可&#xff0c;待数据正常时推送告警恢复&#xff0c;工作日8点到18点执行。【代码还在整理中】 问题分析 告警通知&…

蓝桥杯算法题练习

1、20世纪有多少个星期一 &#xff08;1901、1、1——2000、12、31&#xff09; 方法一&#xff1a;python代码 方法二&#xff1a;excel工具(设置单元格格式&#xff0c;把日期换成周几的形式) 2、100个数相乘&#xff0c;结果有几个0 3、切面条 找规律:对折次数n 弯2^n-1 面…

刷题之动态规划

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的题目了&#xff0c;要特别注意初始化的时候给什么值。 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么->dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是…

mysql之MyBatis核心工作原理

MyBatis核心工作原理 一、源码环境 1.手动编译源码 工欲善其事必先利其器。为了方便我们在看源码的过程中能够方便的添加注释&#xff0c;我们可以自己来从官网下载源码编译生成对应的Jar包&#xff0c;然后上传到本地maven仓库&#xff0c;再引用这个Jar。大家可以自行去官…

读所罗门的密码笔记05_新的力量平衡

1. 技术发展 1.1. 美国和中国俨然成为人工智能研究、开发和部署方面无可争议的领导者 1.2. 人类从未彻底阻止某种技术的发展&#xff0c;虽然不同国家在不同时间对克隆、化学武器和核武器等技术采取了暂停或禁止措施&#xff0c;但我们仍在继续推进最前…

vue学习第二天

1.v-text和v-html区别 效果&#xff1a; 2.v-bind v-bind:是Vuejs中&#xff0c;提供用于绑定属性的指令 正确做法&#xff1a; 3.v-on可以用来简化&#xff08;v-on:&#xff09; 4.事件修饰符 1. 冒泡机制组织.stop----阻止向下冒泡 冒泡机制相当于Android的事件透传&#x…

(十一)图像的罗伯特梯度锐化

环境&#xff1a;Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章&#xff1a; &#xff08;一&#xff09;PythonGDAL实现BSQ&#xff0c;BIP&#xff0c;BIL格式的相互转换 &#xff08;二&#xff09;BSQ,BIL,BIP存储格式的相互转换算法 &#xff08;三…

mapbox-gl扩展sprites图片

在mapbox-gl.js中&#xff0c;通过在styles中设置sprite和glyphs&#xff0c;实现样式图标和字体的加载。而一旦style加载完成&#xff0c;如果重置地图中的style&#xff0c;则会导致地图全部重新加载&#xff0c;图层的顺序&#xff0c;地图上的要素&#xff0c;都会丢失&…

小程序中使用less

在vscode中安装插件 找到左下角齿轮的设置&#xff0c;点击右边图标&#xff0c;进入“settings.json” 加上以下代码配置 "less.compile":{"outExt": ".wxss"}

用navicat进行mysql表结构同步

用navicat进行mysql表结构同步 前言新增一个列然后进行表结构同步删除一个列然后进行表结构同步把Int列转成TinyInt列&#xff0c;看数字溢出的情况下能不能表结构同步总结 前言 从同事那边了解到还能用navicat进行表结构同步&#xff0c;他会在发布更新的时候&#xff0c;直接…

【蓝桥杯选拔赛真题50】C++简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C简易炸弹超人 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 有一块矩形游戏场地&#x…