用NGUI实现刮刮乐的效果

来源:互联网 发布:人体测量尺寸数据 编辑:程序博客网 时间:2024/05/18 20:12
用NGUI实现刮刮乐的效果
需要设置纹理是可读写的。
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);}}}

0 0