Unity遗珠_代码自生成点击

这篇博客探讨了如何在Unity中为Button添加点击灰暗效果,包括官方推荐的方法和尝试通过代码动态实现的方式。虽然遇到带图集的图片处理问题,但提供了将Button和精灵图像结合的代码示例,以及尝试转换Texture的代码片段。尽管存在挑战,作者计划后续继续完善解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
//    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值