[Unity]动态修改URP资源的相关参数

一、获取当前的UniversalRenderPipelineAsset

工程里UniversalRenderPipelineAsset可能有好几种(比如low、mid、high等),游戏运行时会根据机型动态加载指定的UniversalRenderPipelineAsset,以下代码可以动态获取当前使用的UniversalRenderPipelineAsset具体是哪个,然后动态修改阴影等别的参数:

复制代码
        UniversalRenderPipelineAsset m_URPAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
        if (m_URPAsset != null)
        {
            m_DefaultDistance = m_URPAsset.shadowDistance;
            m_URPAsset.shadowDistance = m_ShadowDistance;
        }

二、一个坑

上面代码在Start函数里只能获取默认的UniversalRenderPipelineAsset,而不是当前实际运行的UniversalRenderPipelineAsset,我这边的做法是在协程里等了一帧去获取:

复制代码
    private IEnumerator IEResetShadows()
    {
        //第一帧的时候获取的是默认的pipeline
        yield return null;
        // 动态设置阴影距离
        UniversalRenderPipelineAsset m_URPAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
        if (m_URPAsset != null)
        {
            m_DefaultDistance = m_URPAsset.shadowDistance;
            m_URPAsset.shadowDistance = m_ShadowDistance;
        }
    }
相关推荐
一只一只20 小时前
Unity 3D笔记——《B站阿发你好》
笔记·3d·unity
SmalBox1 天前
【光照】[PBR][法线分布]GGX实现方法对比
unity·渲染
UWA1 天前
游戏在高负载场景下,整机功耗控制在多少
游戏·unity·性能优化·游戏开发
软件黑马王子2 天前
2025GUI项目实践:Unity编辑模式下GUI运行
游戏·unity·gui
王源骏2 天前
Unity实现网页端 打开本地文件选择图片上传到阿里云的OSS
unity·阿里云·游戏引擎
爱吃小胖橘2 天前
Unity-角色控制器
3d·unity·c#·游戏引擎
绀目澄清2 天前
unity3d PuppetMaster 布娃娃插件在学习
unity
PaoloBanchero2 天前
Unity 虚拟仿真实验中设计模式的使用 ——状态模式(State Pattern)
unity·设计模式·状态模式
SmalBox2 天前
【光照】[PBR][镜面反射]实现方法解析
unity·渲染
Robbie丨Yang2 天前
【Unity 入门教程】四、如何制作一个 Perfab
unity·游戏引擎