当前项目Unity版本:2019.4.23.f1
1.下载URP相关 Package包
Window->Package Manger
2.创建URP PipelineAsset(ForwardRender)文件,并指定一下
(1)创建文件
创建PipelineAsset(ForwardRender) 文件
PipelineAsset(ForwardRender)文件
(2)指定项目使用URP渲染管线,需要设置2处
打开Editor->Project Settting窗口
指定Graphics使用URP
指定Quality使用URP
3.升级shader,支持URP
(1)升级unity自带的shader
升级Unity自带shader
(2) 自定义shader,只能手动修改。 并且追加到Graphics中
可以参考:内置管线Shader升级到URP详细手册
https://www.jianshu.com/p/3fef69e2efb6
4.多相机实现方式修改。
URP为了实现多相机,Camera添加RenderType属性。整个游戏只能有一个Base,其他都是Overlay,并将Overlay相机添加到 Base相机的Stack列表里。
注意:升级URP之后,Camera.depth不管用了,用Stack列表里的顺序替代,先添加进列表的相机先渲染,后添加的后渲染。
关于设置RenderType和将Overlay相机添加进Base的Stack列表,并控制Stack列表里相机顺序,可以自定义个脚本挂到Camera所在GameObject上。
- using UnityEngine;
- using UnityEngine.Rendering.Universal;
- [RequireComponent(typeof(Camera))]
- [DisallowMultipleComponent]
- public class URPCamera : MonoBehaviour
- {
- public static UniversalAdditionalCameraData BaseCamera;
- [Tooltip("整个游戏只能有1个Base,其他都是Overlay")]
- public CameraRenderType m_CameraRenderType = CameraRenderType.Overlay;
- [Tooltip("相机depth(赋值0,取老的Camera.depth)")]
- public float m_CameraDepth;
- private Camera m_Camera;
- private void Awake()
- {
- m_Camera = GetComponent();
- UniversalAdditionalCameraData universalAdditionalCameraData = m_Camera.GetUniversalAdditionalCameraData();
- universalAdditionalCameraData.renderType = m_CameraRenderType;
- if (m_CameraRenderType == CameraRenderType.Base)
- {
- if (BaseCamera != null)
- {
- Debug.LogErrorFormat("URP Camera 配置错误,有多个Base Camera!!! Old = {0}, New = {1} ", BaseCamera.name, m_Camera.name);
- }
- else
- {
- BaseCamera = universalAdditionalCameraData;
- }
- }
- if (m_CameraDepth == 0)
- m_CameraDepth = m_Camera.depth;
- }
- private void Start()
- {
- if (m_CameraRenderType == CameraRenderType.Overlay)
- {
- if (BaseCamera != null)
- {
- if (!BaseCamera.cameraStack.Contains(m_Camera))
- BaseCamera.cameraStack.Add(m_Camera);
- BaseCamera.cameraStack.Sort((A, B) => { return A.gameObject.GetComponent().m_CameraDepth.CompareTo(B.gameObject.GetComponent().m_CameraDepth); });
- }
- else
- {
- Debug.LogError("URP Camera 配置错误,没有Base Camera!!!");
- }
- }
- }
- private void OnDestroy()
- {
- if (m_CameraRenderType == CameraRenderType.Overlay)
- {
- if (BaseCamera != null)
- {
- BaseCamera.cameraStack.Remove(m_Camera);
- }
- }
- }
- }
5.后处理,要换实现方式。
可以参考:
URP屏幕后处理
https://www.jianshu.com/p/d23671fdc2da