Unity3D NGUI刮刮卡效果
2016-04-29 18:30
901 查看
线上效果
确保你的纹理的read/write 是勾选的,纹理格式是 RGBA32的
//代码
确保你的纹理的read/write 是勾选的,纹理格式是 RGBA32的
//代码
using UnityEngine; [RequireComponent(typeof(UITexture))] public class ChangeTexturePixel : MonoBehaviour { private UITexture mUITex; private Texture2D MyTex; public int Radius = 10; public Color Col = new Color(0,0,0,0); void Awake() { mUITex = GetComponent<UITexture>(); var tex = mUITex.mainTexture as Texture2D; MyTex = new Texture2D(tex.width, tex.height, tex.format, false); MyTex.SetPixels(tex.GetPixels()); MyTex.Apply(); mUITex.mainTexture = MyTex; } void ChangePixelColorByCircle(int x, int y, int radius, Color col) { for (int i = -Radius; i < Radius; i++) { var py = y + i; if (py < 0 || py >= MyTex.height) { continue; } for (int j = -Radius; j < Radius; j++) { var px = x + j; if (px < 0 || px >= MyTex.width) { continue; } if (new Vector2(px - x, py - y).magnitude > Radius) { continue; } MyTex.SetPixel(px, py, Col); } } MyTex.Apply(); } int[] WorldPos2Pix(Vector3 worldPos) { var temp = transform.InverseTransformPoint(worldPos); var pos = new Vector2(temp.x+mUITex.width/2,temp.y+mUITex.height/2); float rateX = mUITex.width / (float)MyTex.width; float rateY = mUITex.height / (float)MyTex.height; return new [] { (int)(pos.x / rateX), (int)(pos.y/rateY) }; } void Update () { if (Input.GetMouseButton(0)) { Vector3 worldPos = UICamera.currentCamera.ScreenToWorldPoint(Input.mousePosition); var posA = WorldPos2Pix(worldPos); ChangePixelColorByCircle(posA[0], posA[1], Radius, Col); } } }
相关文章推荐
- 使用Unity3D 5.3.4 模仿2D游戏 FlappyBird(二)
- unity3d 实现残影特效
- unity3D 涂涂乐使用shader实现上色效果
- Unity5打包assetbundle
- Vuforia 在Unity 中失焦的问题
- 使用Unity3D 5.3.4 模仿2D游戏 FlappyBird(一)
- unity安装记录
- Unity 编辑器列表控件
- 在unity3d中用EasyTouch的操纵杆控制相对于不同角度的摄像机的第三人物视角的相对位移的代码段
- 简要分析unity3d中剪不断理还乱的yield
- 基于unity的飞行模拟设计
- unity发射弓箭轨迹的实现
- Shader之学习笔记三
- Unity3D 5.3.4的UGUI编程
- unity编译时自动结束项目运行
- unity渲染层级关系小结
- Unity3d碰撞检测中碰撞器与触发器的区别
- Unity3D中世界坐标转换到NGUI坐标
- Unity世界坐标与屏幕坐标之间如何转换
- Unity ScreentoWorldPoint中的z坐标说明