Unity 如何实现背景模糊?

该代码段展示了如何在Unity中创建一个模糊Shader,首先将相机视图渲染到一个RenderTexture上,然后将这个纹理赋值给RawImage组件,以在UI上显示。在过程中,涉及到Camera渲染、RenderTexture和Texture2D的使用,以及对Canvas的排序顺序进行设置。

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

准备一个模糊Shader

将相机视图渲染到texture上

将渲染后的texture赋值给RawImage图片

 

using UnityEngine;
using UnityEngine.UI;

public class UIBgBlur : MonoBehaviour
{
    // Start is called before the first frame update
    private RawImage blur;
    private Camera uiCamera;
    private Canvas blurCanvas;
    void Start()
    {
        blur = transform.Find("RawImage").GetComponent<RawImage>();
        uiCamera = GameObject.Find("Main Camera").GetComponent<Camera>();
        blurCanvas = GetComponent<Canvas>();
    }

    public void SetSortingOrder(int order)
    {
        blurCanvas.overrideSorting = true;
        blurCanvas.sortingOrder = order;
    }

    public void Show()
    {
        DrawCameraPicture();
    }

    private void DrawCameraPicture()
    {
        // 抓取相机视图转为图片
        RenderTexture targetTexture = new RenderTexture(Screen.width, Screen.height, 24, RenderTextureFormat.ARGB32);
        var texRect = new Rect(0, 0, targetTexture.width, targetTexture.height);
        targetTexture.name = "UIBgBlur_onSceneMemory";
        var tempTexture2D = new Texture2D(targetTexture.width, targetTexture.height, TextureFormat.RGB24, false);
        tempTexture2D.name = "UIBgBlur_onSceneMemory";
        var cameraPrevT = uiCamera.targetTexture;
        uiCamera.targetTexture = targetTexture;    // 设置相机的目标渲染纹理。
        uiCamera.Render();                         // 手动渲染相机
        uiCamera.targetTexture = cameraPrevT;      // 还原相机渲染目标
        RenderTexture.active = targetTexture;      // 设置当前活动的渲染纹理
        tempTexture2D.ReadPixels(texRect, 0, 0);
        tempTexture2D.Apply();
        RenderTexture.active = null;               // 清空
        
        // 赋值给RawImage
        blur.texture = tempTexture2D;
        blur.texture.name = "UIBgBlur_onSceneMemory";
        blur.gameObject.SetActive(true);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值