1.可以用于纹理的处理,也可用于模型显示的处理(比如某件准备或者服饰未获取的时候,灰化显示)
线上对比图:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TextureGrey : MonoBehaviour { [SerializeField] UITexture tex = null; Texture2D tex2D = null; Vector3 grey = new Vector3(0.299f, 0.587f, 0.114f); //灰化Shader中的灰度值,具体含义目前不是太清楚 void Start() { tex2D = tex.mainTexture as Texture2D; } void Update() { if (Input.GetKeyUp(KeyCode.A)) { //灰化 Vector3 tempV3 = Vector3.zero; if (null != tex2D) { Color[] cols = tex2D.GetPixels(); for (int i = 0, iMax = cols.Length; i < iMax; ++i) { tempV3.Set(cols[i].r, cols[i].g, cols[i].b); float dot = Vector3.Dot(tempV3, grey); cols[i] = new Color(dot, dot, dot, cols[i].a); } tex2D = new Texture2D(tex2D.width, tex2D.height, TextureFormat.ARGB32, false); tex2D.SetPixels(cols); tex2D.Apply(false); //实际上传改变后的像素数据到显卡上 tex.mainTexture = tex2D as Texture; } } } }