线上效果
确保你的纹理的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); } } }