Unity 官方的button自带点击灰暗效果
当然你也可以手动,添加,官方也建议这么做,但有没办法代码动态添加的呢
试了一下,还真有点“难”
对于一些带图集的图片处理不了,暂时记录一下
之后再补充吧
//将button和精灵,代码捆绑(load sprite后)
public static void UiAttachButtonPress(GameObject node, Sprite sprite)
{
if (node.GetComponent<Button>()==null)
{
Debug.LogError("这方法只能挂在Button下");
return;
}
var raw = node.transform.Find("BUTTON_IMG");
if (raw == null)
{
var obj = new GameObject("BUTTON_IMG");
obj.transform.SetParent(node.transform,false);
raw = obj.transform;
}
var rawImage = raw.GetAddComponent<RawImage>();
if (sprite != null)
{
//sprite 不能带图集
rawImage.texture = sprite.texture;
// // 创建单独的纹理
// Texture2D tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, TextureFormat.ARGB32, false);
// Texture2D tt = TextureToTexture2D(sprite.texture);
// var rect = sprite.rect;
// var colors = tt.GetPixels((int) rect.xMin, (int) (rect.height-rect.yMin),
// (int) rect.width, (int) rect.height);
// tex.SetPixels(colors);
// tex.Apply();
// rawImage.texture = tex;
}
node.GetComponent<Button>().targetGraphic = rawImage;
}
// private static Texture2D TextureToTexture2D(Texture texture) {
// Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
// RenderTexture currentRT = RenderTexture.active;
// RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
// Graphics.Blit(texture, renderTexture);
//
// RenderTexture.active = renderTexture;
// texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
// texture2D.Apply();
//
// RenderTexture.active = currentRT;
// RenderTexture.ReleaseTemporary(renderTexture);
//
// return texture2D;
// }