前言
前几天技能系统发布了新版本,休息了以下,接下来要开始开发Moba项目的特效部分了,准备使用Shader Graph(简称SG)技术栈,但是SG只在SRP中才可以正常工作,所以要做一些适配。
环境
DCET中的FGUI模块(Model层与Hotfix层)
ET 5.0
Unity 2019.4.8 LTS
URP 7.3.1
步骤
由于URP版本中Camera的特殊性(使用Render Type和CameraStack控制渲染),需要先对相机模块进行更改
首先Unity.Model和ThirdParty的Assembly Definition需要索引Unity.RenderPipeline.Universal.Runtime
我们要确保整个项目只有一个Render Type为Base的Camera,否则渲染将不会如我们所愿的那样(指Build-in管线中相机渲染结果的自动叠加)
首先更改FGUI源码中的StageCamera.cs文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public static Camera CreateCamera(string name, int cullingMask) { GameObject cameraObject = new GameObject(name); Camera camera = cameraObject.AddComponent<Camera>(); camera.depth = 1; camera.cullingMask = cullingMask; camera.clearFlags = CameraClearFlags.Depth; camera.orthographic = true; camera.orthographicSize = DefaultCameraSize; camera.nearClipPlane = -30; camera.farClipPlane = 30; #if UNITY_5_4_OR_NEWER camera.stereoTargetEye = StereoTargetEyeMask.None; #endif #if UNITY_5_6_OR_NEWER camera.allowHDR = false; camera.allowMSAA = false; #endif #region 适配URP UniversalAdditionalCameraData universalAdditionalCameraData = camera.GetUniversalAdditionalCameraData(); universalAdditionalCameraData.renderType = CameraRenderType.Overlay; Camera.main.GetUniversalAdditionalCameraData().cameraStack.Add(camera); DontDestroyOnLoad(cameraObject); #endregion cameraObject.AddComponent<StageCamera>(); return camera; }
|
创建MainCamera,放置在Init场景,使用Init脚本索引MainCamera
然后在Init代码中设置
1
| DontDestroyOnLoad(MainCamera);
|
即可正常运行
番外
如果发现项目中部分Shader失效,是因为在URP中已经不适配了,需要自己重写